MinterCore 1.2.7

MinterCore 1.2.7

Maintained by Alexey Sidorov.



 
Depends on:
Alamofire= 4.7.3
ObjectMapper~> 3.1
BigInt~> 3.0
CryptoSwift~> 1.0
secp256k1.swift~> 0.1
 

  • By
  • sidorov.panda

Version CI Status Version Platform License Last commit

MinterCore

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Installation

MinterCore is available through CocoaPods. To install

it, simply add the following line to your Podfile:

pod 'MinterCore'

About

This is a pure Swift SDK for working with Minter blockchain

Using MinterAPI

You can get all valid responses and full documentation at Minter Node Api

Initializing SDK

///Minter SDK initialization
import MinterCore

let nodeUrlString = "https://minter-node-1.testnet.minter.network:8841" // example of a node url

MinterCoreSDK.initialize(urlString: nodeUrlString)

address

Returns coins list, balance and transaction count (for nonce) of an address.

public func address(_ address: String, height: String = "0", with completion: (([String: Any]?, Error?) -> ())?)
Example
AccountManager.default.address("Mxfe60014a6e9ac91618f5d1cab3fd58cded61ee99", with: { (data, err) in
  //["balance": ["MNT":"10000000000"], "transaction_count":0]
})

nonce

Use address method of AccountManager to get nonce

send

Returns the result of sending signed tx.

public func send(tx: String, completion: ((String?, String?, Error?) -> ())?)
Example
TransactionManager.default.send(tx: "Mt...") { (hash, statusText, error) in

}

status

Returns node status info.

public func status(with completion: (([String : Any]?, Error?) -> ())?)

validators

Returns list of active validators.

public func validators(height: Int, with completion: (([[String: Any]]?, Error?) -> ())?)

estimateCoinBuy

Return estimate of buy coin transaction.

public func estimateCoinBuy(fromId: Int, toId: Int, amount: Decimal, completion: ((Decimal?, Decimal?, Error?) -> ())?)

estimateCoinSell

Return estimate of sell coin transaction.

public func estimateCoinSell(fromId: Int, toId: Int, amount: Decimal, completion: ((Decimal?, Decimal?, Error?) -> ())?)

coin info

Returns information about coin. Note: this method does not return information about base coins (MNT and BIP).

public func info(symbol: String, height: String = "0", completion: ((Coin?, Error?) -> ())?)

block

Returns block data at given height.

public func blocks(height: String = "0", with completion: (([String : Any]?, Error?) -> ())?)

events

Returns events at given height.

public func events(height: String = "0", with completion: (([String : Any]?, Error?) -> ())?)

transaction

Returns transaction info.

public func transaction(hash: String, completion: ((Transaction?, Error?) -> ())?)

candidate

Returns candidate’s info by provided public_key. It will respond with 404 code if candidate is not found.

public func candidate(publicKey: String, height: String = "0", completion: (([String : Any]?, Error?) -> ())?)

candidates

Returns list of candidates.

height is optional parameter.

public func candidates(height: String = "0", includeStakes: Bool = false, completion: (([[String : Any]]?, Error?) -> ())?)

estimateTxCommission

Return estimate of transaction.

public func estimateCommission(for rawTx: String, height: String = "0", completion: ( (Decimal?, Error?) -> ())?)

transactions

Return transactions by query.

public func transaction(query: String, completion: (([Transaction]?, Error?) -> ())?)

unconfirmedTransactions

Returns unconfirmed transactions.

public func unconfirmedTransaction(limit: String = "0", completion: (([String : Any]?, Error?) -> ())?)

Using MinterSDK

Sign transaction

Returns a signed tx.

Example
  • Sign the SendCoin transaction
let sendData = SendCoinRawTransactionData(to: "Mx6b6b3c763d2605b842013f84cac4d670a5cb463d", value:
BigUInt(decimal: 1 * TransactionCoinFactorDecimal)!, coinId: 0).encode()

let rawTransaction = SendCoinRawTransaction(nonce: BigUInt(1), chainId: 2, gasCoinId: 0, data: sendData!)

let mnemonic = "adjust correct photo fancy knee lion blur away coconut inform sun cancel"

let seed = String.seedString(mnemonic)!
let pk = PrivateKey(seed: Data(hex: seed))

guard let key = try! pk.derive(at: 44, hardened: true).derive(at: 60, hardened: true).derive(at: 0, hardened: true).derive(at: 0).derive(at: 0).raw.toHexString()

/// Signing raw transaction
let signedTx = RawTransactionSigner.sign(rawTx: rawTransaction, privateKey: key)!

/// Sending raw transaction
transactionManager.send(tx: "Mt" + signedTx) { (txHash, resultText, error) in
  print(txHash)
  print(resultText)
  print(error)
}
Example
  • Sign the SellCoin transaction
let gasCoinId = 0
let nonce = BigUInt(1)
let coinFromId = 0
let coinToId = 1
let value = BigUInt(1)
let minimumValue = BigUInt(0)
let tx = SellCoinRawTransaction(nonce: nonce, chainId: 2, gasCoinId: gasCoinId, coinFromId: coinFromId, coinToId: coinToId, value: value, minimumValueToBuy: minimumValue)
Example
  • Sign the SellAllCoin transaction
let gasCoinId = 0
let nonce = BigUInt(1)
let coinFromId = 0
let coinToId = 1
let minimumValue = BigUInt(0)
let tx = SellAllCoinsRawTransaction(nonce: nonce, chainId: 2, gasCoinId: gasCoinId, coinFromId: coinFromId, coinToId: coinToId, minimumValueToBuy: minimumValue)
Example
  • Sign the BuyCoin transaction
let gasCoinId = 0
let nonce = BigUInt(1)
let coinFromId = 0
let coinToId = 1
let value = BigUInt(1)
let maximumValue = BigUInt(0)
let tx = BuyCoinRawTransaction(nonce: nonce, chainId: 2, gasCoinId: gasCoinId, coinFromId: coinFromId, coinToId: coinToId, value: value, maximumValueToSell: maximumValue)
Example
  • Sign the CreateCoin transaction
let name = "Name"
let symbol = "SYMBOL"
let amount = BigUInt(1000)
let reserve = BigUInt(300000000000000000000000)
let ratio = BigUInt(70)
let maxSupply = BigUInt(1000000000000000) 

let data = CreateCoinRawTransactionData(
  name: name,
  symbol: symbol,
  initialAmount: initialAmount,
  initialReserve: initialReserve,
  reserveRatio: reserveRatio,
  maxSupply: maxSupply
)
let tx = CreateCoinRawTransaction(nonce: nonce, chainId: 2, gasCoinId: 0, data: data.encode()!)
Example
  • Sign the DeclareCandidacy transaction
let nonce = BigUInt(1)
let gasCoinId = 0
let coinId = 0
let address = "Mx7633980c000139dd3bd24a3f54e06474fa941e16"
let publicKey = "Mp91cab56e6c6347560224b4adaea1200335f34687766199335143a52ec28533a5"
let commission = BigUInt(1)
let stake = BigUInt(2)
let model = DeclareCandidacyRawTransaction(
  nonce: nonce,
  chainId: 2,
  gasCoinId: gasCoinId,
  address: address,
  publicKey: publicKey,
  commission: commission,
  coinId: coinId,
  stake: stake
)
Example
  • Sign the Delegate transaction
let tx = DelegateRawTransaction(
  nonce: BigUInt(1),
  chainId: 2,
  gasCoinId: 0,
  publicKey: "Mp91cab56e6c6347560224b4adaea1200335f34687766199335143a52ec28533a5",
  coinId: 0,
  value: BigUInt(1000)
)
Example
  • Sign the SetCandidateOn transaction
let nonce = BigUInt(1)
let gasCoinId = 0
let publicKey = "Mpeadea542b99de3b414806b362910cc518a177f8217b8452a8385a18d1687a80b"
let model = SetCandidateOnlineRawTransaction(nonce: nonce, chainId: 2, gasCoinId: gasCoinId, publicKey: publicKey)
Example
  • Sign the SetCandidateOff transaction
let nonce = BigUInt(1)
let gasCoinId = 0
let publicKey = "Mpeadea542b99de3b414806b362910cc518a177f8217b8452a8385a18d1687a80b"
let model = SetCandidateOfflineRawTransaction(nonce: nonce, chainId: 2, gasCoinId: gasCoinId, publicKey: publicKey)
Example
  • Sign the RedeemCheck transaction
let tx = RedeemCheckRawTransaction(
  nonce: BigUInt(1),
  chainId: 2,
  gasCoinId: 0,
  rawCheck: <Check data>,
  proof: <Proof Data>)
Example
  • Sign the Unbond transaction
let coinId = 0
let publicKey = "91cab56e6c6347560224b4adaea1200335f34687766199335143a52ec28533a5"
let value = BigUInt(2)
let model = UnbondRawTransactionData(publicKey: publicKey, coinId: coinId, value: value)
Example
  • Sign the EditCandidate transaction
let pk = "Mpc5b635cde82f796d1f8320efb8ec634f443e6b533a973570e4b5ea04aa44e96d"
let address1 = "Mxe7ca647d17599d3e83048830fbb2df3726a7d22c"
let address2 = "Mxa8ca647d17599d3e83048830fbb2df3726a7d215"
let model = EditCandidateRawTransaction(nonce: BigUInt(1), chainId: 2, gasCoinId: 0, publicKey: pk, rewardAddress: address1, ownerAddress: address2)

Create Minter Check

Example
  • Create check
let nonce = "1"
let dueBlock = BigUInt(99)
let coinId = 0
let value = BigUInt(1)
let phrase = "123"
let tx = IssueCheckRawTransaction(nonce: nonce, dueBlock: dueBlock, coinId: coinId, value: value, gasCoinId: coinId, passPhrase: phrase)
tx.data = data.encode()!
let result = RawTransactionSigner.sign(rawTx: tx, privateKey: <Private Key>)
  • Create proof
let proof = RawTransactionSigner.proof(address: "Mxe7ca647d17599d3e83048830fbb2df3726a7d22c", passphrase: "some pass phrase")

Minter Wallet

  • Generate mnemonic.
let mnemonics = String.generateMnemonicString()
  • Get seed from mnemonic.
let res = RawTransactionSigner.seed(from: mnemonic, passphrase: "", language: .english)
  • Get private key from seed.
let privateKey = PrivateKey(seed: Data(hex: seed))
let key = try? privateKey
  .derive(at: 44, hardened: true)
  .derive(at: 60, hardened: true)
  .derive(at: 0, hardened: true)
  .derive(at: 0)
  .derive(at: 0)
  • Get public key from private key.
let publicKey = RawTransactionSigner.publicKey(privateKey: privateKey!.raw, compressed: false)!.dropFirst()
  • Get Minter address from public key.
let address = RawTransactionSigner.address(publicKey: publicKey)

Author

sidorov.panda, [email protected]

License

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