gnosis/bivrost-swift

Name: bivrost-swift

Owner: GNOSIS

Description: :fire: :rainbow: Bridge between Solidity Contracts and Swift

Created: 2017-09-12 16:26:29.0

Updated: 2018-05-23 08:53:03.0

Pushed: 2018-05-23 08:53:08.0

Homepage:

Size: 125

Language: Swift

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Bivrost Build Status

? ? Bridge between Solidity Contracts and Swift

Bivrost is in very early development. Do not use this for anything important.

Description

bivrost generates Swift classes for Solidity contracts that know how to encode and decode their function calls. Use this to generate transactions that can then be sent to the blockchain.

You can use this as a pre-compile script phase for your Swift project. Generate the needed files, then add them to your project.

bivrost creates an output folder that contains auxiliary code for encoding and decoding as well as generated contract classes.

Usage
Mint ?
$ mint run gnosis/bivrost-swift "bivrost --input './contracts/*.json' --output '../Sources/Solidity'"
SPM
$ git clone https://github.com/gnosis/bivrost-swift
$ cd bivrost-swift
$ swift run bivrost --input './contracts/*.json' --output '../Sources/Solidity'

Using BivrostKit from code is currently not supported, but is on the roadmap.

Options

Run $ mint run gnosis/bivrost-swift "bivrost --help" for current help.

Input files

bivrost parses the Solidity contract JSON files generated by the truffle compiler for code generation. They should have the following format:

{
    "contract_name": "TestContract",
    "abi": [
      {
        "constant": false,
        "inputs": [
          {
            "name": "inputVariable",
            "type": "uint16"
          },
          {
            "name": "anotherInputVariable",
            "type": "uint128"
          }
        ],
        "name": "aTestFunction",
        "outputs": [
          {
            "name": "outputVariable",
            "type": "bool"
          }
        ],
        "payable": false,
        "type": "function"
      },
      [ more function definitions... ]
    ]
}
Output

bivrost generates following folder structure in the output folder:

<output folder>
  - BivrostError.swift
  - Coding
    - BaseEncoder.swift
    - BaseDecoder.swift
  - Extensions
    - BigIntExtension.swift
    - DataExtension.swift
    - StringExtension.swift
  - Generated Contracts
    - ContractName1.swift
    - ContractName2.swift
  - Generated Types
    - ArrayX-Generated.swift
    - BytesX-Generated.swift
    - IntX-Generated.swift
    - UIntX-Generated.swift
  - Protocols
    - DynamicType.swift
    - SolidityCodable.swift
    - SolidityFunction.swift
    - StaticType.swift
  - Types
    - Address.swift
    - ArrayX.swift
    - Bool.swift
    - Bytes.swift
    - BytesX.swift
    - Function.swift
    - IntX.swift
    - Solidity.swift
    - String.swift
    - UIntX.swift
    - VariableArray.swift

The generated code depends on BigInt (import BigInt) so make sure you make that available for the generated code.

License

Bivrost is available under the MIT license. See the LICENSE file for more info.

Issues

Tests currently do not work when generating an Xcode project via swift package generate-xcodeproj. This issue is described in https://github.com/Quick/Quick/issues/751.

Workarounds:


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.