Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v1.2.0-pre0 - Network Robustness, Fog 1.2.0, Apple Silicon/M1 & Mac Catalyst, LibMobileCoin v1.2.0-pre1 #73

Conversation

the-real-adammork
Copy link
Collaborator

Title

v1.2.0-pre0 - Network Robustness, Fog 1.2.0, Apple Silicon/M1 & Mac Catalyst

Description

Added a way for implementing apps to pass in there own HttpRequester which can be useful for network robustness. Subspec LibMobileCoin now supports Apple Silicon/M1 and Mac Catalyst. Code changes to support Fog v1.2.0.

pre1 Changes

  • Uses the v1.2.0-pre1 version of LibMobileCoin which supports a higher version of GRPC.
  • Added bridging headers
  • Updated Gemfile/Makefile to use the latest cocoapods version 1.11.2

Future Work

Fix the docs steps in the circleci build process. Will require jazzy related fixes and testing on Xcode 11.

Changes

Network Robustness

Adds a separate HTTP networking architecture. An object conforming to protocol HttpRequester can be provided to the NetworkConfig object when the MobileCoinClient is created. Then the TransportProtocolOption can be changed from grpc to http.

NOTE: This branch will not run because it depends on changes in other submodules that have not yet been merged.

HttpRequester

Implementing apps/frameworks should provide an object conforming to this protocol. Our RestApiRequester wraps around an HttpRequester to communicate with with our services using protobufs.

Sources/Network/HttpConnection/HttpRequester.swift

Attested & Auth Connection Wrappers

HTTP versions of the Auth & Attested wrapper classes. These protocol and their default implementations handle the logic paths needed for authentication/attestation and re-authentication/attestation:

Can become generic

Sources/Network/HttpConnection/ArbitraryHttpConnection.swift
Sources/Network/HttpConnection/AttestedHttpConnection.swift

Networking Protocols

Separate code-paths for HTTP versions of the networking protocols:

Sources/Network/HttpConnection/HttpCallable/AttestedHttpCallable.swift
Sources/Network/HttpConnection/HttpCallable/AuthHttpCallable.swift
Sources/Network/HttpConnection/HttpCallable/AuthHttpCallableClientWrapper.swift
Sources/Network/HttpConnection/HttpCallable/HttpCallable.swift

HTTP "interfaces" that closely mimic functionality from GRPC. Allows us to re-use more of our existing patterns.

Sources/Network/HttpConnection/HTTPInterface/HTTPCallOptions.swift
Sources/Network/HttpConnection/HTTPInterface/HTTPClient.swift
Sources/Network/HttpConnection/HTTPInterface/HTTPClientCall.swift
Sources/Network/HttpConnection/HTTPInterface/HTTPMethod.swift
Sources/Network/HttpConnection/HTTPInterface/HTTPResponse.swift
Sources/Network/HttpConnection/HTTPInterface/HTTPStatus.swift
Sources/Network/HttpConnection/HTTPInterface/HTTPUnaryCall.swift

HTTP Connection Implementations

Wrapper classes that interface directly with protoc-swift generated .swift files for our protobuf models.

Sources/Network/HttpConnection/HttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/BlockchainHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/ConsensusHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/FogBlockHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/FogKeyImageHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/FogMerkleProofHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/FogReportHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/FogUntrustedTxOutHttpConnection.swift
Sources/Network/HttpConnection/HttpConnections/FogViewHttpConnection.swift

HTTP versions of protoc-swift generated models

The GRPC versions of these are generated by protoc-swift. The HTTP versions were edited by hand to work with the HTTP Connections implementations.

This could be automated preferably with a protoc-swift plugin template but also sed/VIM if needed.

Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/attest.http.swift
Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/consensus_client.http.swift
Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/consensus_common.http.swift
Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/ledger.http.swift
Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/report.http.swift
Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/view.http.swift

Fog Updates

The latest version of fog changes the name of a protobuf FogLedger_Block -> FogLedger_BlockData.

Compressed Commitment

The TxOut compressed commitment is no longer sent in the protobuf message because it can be reconstructed with its constituent parts (+ the user's view_private_key)

We now reconstruct the commitment in several places whereas before it was being returned from the decoded protobuf message.

Lastly some function signatures into LibMobileCoin were updated to adjust to the changes.

Miscellaneous

New MrEnclave values

Support for Apple Silicon/M1 & Mac Catalyst

Unit Tests

One unit test was removed. It creates a TxOut and tries to unmask the value with an incorrect private view key. The return value should be 'nil' but is noise. It will require a change in the rust code and should be implemented in a future release.

Some objects were re-serialized to match the new TxOut structure.

Credentials are not required for consensus so this has been changed in the NetworkConfig

Tests can be run with TransportProtocol == .http by changing the default value in NetworkConfig

@the-real-adammork the-real-adammork merged commit 9bc59e1 into mobilecoinofficial:master Sep 17, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants