Skip to content

Commit

Permalink
Tron token (#85)
Browse files Browse the repository at this point in the history
* Add new contract type.

* Add contract types.

* Update of the Tron contract.

* Add unit tests.
OlegGordiichuk authored and vikmeup committed Nov 11, 2018
1 parent eff89c8 commit b79c5a8
Showing 5 changed files with 98 additions and 19 deletions.
37 changes: 20 additions & 17 deletions Sources/Tron/TronContract.swift
Original file line number Diff line number Diff line change
@@ -9,28 +9,31 @@ import SwiftProtobuf

public struct TronContract {

private let from: Address
private let to: Address
private let amount: Int64
private let type: TronContractType

public init(
from: Address,
to: Address,
amount: Int64
) {
self.from = from
self.to = to
self.amount = amount
public init(type: TronContractType) {
self.type = type
}

public func contract() throws -> Protocol_Transaction.Contract {
var contract = Protocol_Transaction.Contract()
var transferContract = Protocol_TransferContract()
transferContract.ownerAddress = Crypto.base58Decode(from.description)!
transferContract.toAddress = Crypto.base58Decode(to.description)!
transferContract.amount = amount
contract.type = .transferContract
contract.parameter = try Google_Protobuf_Any.init(message: transferContract)
switch type {
case .transferContract(let from, let to,let amount):
var transferContract = Protocol_TransferContract()
transferContract.ownerAddress = Crypto.base58Decode(from.description)!
transferContract.toAddress = Crypto.base58Decode(to.description)!
transferContract.amount = amount
contract.type = .transferContract
contract.parameter = try Google_Protobuf_Any.init(message: transferContract)
case .transferAssetContract(let from, let to, let amount, let assetName):
var transferAssetContract = Protocol_TransferAssetContract()
transferAssetContract.ownerAddress = Crypto.base58Decode(from.description)!
transferAssetContract.toAddress = Crypto.base58Decode(to.description)!
transferAssetContract.assetName = Data(assetName.utf8)
transferAssetContract.amount = amount
contract.type = .transferAssetContract
contract.parameter = try Google_Protobuf_Any.init(message: transferAssetContract)
}
return contract
}
}
22 changes: 22 additions & 0 deletions Sources/Tron/Type/TronContractType.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright © 2017-2018 Trust.
//
// This file is part of Trust. The full Trust copyright notice, including
// terms governing use, modification, and redistribution, is contained in the
// file LICENSE at the root of the source code distribution tree.

import UIKit

public enum TronContractType {
case transferContract(from: Address, to: Address, amount: Int64)
case transferAssetContract(from: Address, to: Address, amount: Int64, assetName: String)
}

extension TronContractType {
public func transferContract(from: Address, to: Address, amount: Int64) -> TronContractType {
return .transferContract(from: from, to: to, amount: amount)
}
public func transferAssetContract(from: Address, to: Address, amount: Int64, assetName: String) -> TronContractType {
return .transferAssetContract(from: from, to: to, amount: amount, assetName: assetName)
}
}

38 changes: 38 additions & 0 deletions Tests/Tron/TronAssetContractTest.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright © 2017-2018 Trust.
//
// This file is part of Trust. The full Trust copyright notice, including
// terms governing use, modification, and redistribution, is contained in the
// file LICENSE at the root of the source code distribution tree.

import XCTest
import TrustCore

class TronAssetContractTest: XCTestCase {
func testAssetTronTransaction() {
let from = BitcoinAddress(string: "TJRyWwFs9wTFGZg3JbrVriFbNfCug5tDeC")!
let to = BitcoinAddress(string: "THTR75o8xXAgCTQqpiot2AFRAjvW1tSbVV")!
let amount = Int64(4)
let assetName = "IPFS"
let type = TronContractType.transferAssetContract(from: from, to: to, amount: amount, assetName: assetName)
let contract = TronContract(type: type)
let timestamp: Int64 = 1541890116000
let txTrieRoot = Data(hexString: "845ab51bf63c2c21ee71a4dc0ac3781619f07a7cd05e1e0bd8ba828979332ffa")!
let parentHash = Data(hexString: "00000000003cb800a7e69e9144e3d16f0cf33f33a95c7ce274097822c67243c1")!
let number = Int64(3979265)
let witnessAddress = Data(hexString: "41b487cdc02de90f15ac89a68c82f44cbfe3d915ea")!
let version = Int32(3)
let block = TronBlock(timestamp: timestamp, txTrieRoot: txTrieRoot, parentHash: parentHash, number: number, witnessAddress: witnessAddress, version: version)
let tronTransaction = TronTransaction(tronContract: contract, tronBlock: block, timestamp: Date(timeIntervalSince1970: 1539295479))

let transaction = try! tronTransaction.transaction()

var sighn = TronSign(tronTransaction: transaction)
let privateKey = PrivateKey(data: Data(hexString: "2d8f68944bdbfbc0769542fba8fc2d2a3de67393334471624364c7006da2aa54")!)!

try! sighn.sign(hashSigner: { data in
return Crypto.sign(hash: data, privateKey: privateKey.data)
})

XCTAssertEqual(sighn.signature?.hexString, "dafb40c26a31bd90c13fff181bd0b8bcbe286b53a0f3da28c594bca85e0635b930a66075ff12fbe562e453c6a7bc704be45cf8c157c37ea019b4df0a81dd842100")
}
}
4 changes: 2 additions & 2 deletions Tests/Tron/TronTransactionSignerTest.swift
Original file line number Diff line number Diff line change
@@ -12,8 +12,8 @@ class TronContractTests: XCTestCase {
let from = BitcoinAddress(string: "TJRyWwFs9wTFGZg3JbrVriFbNfCug5tDeC")!
let to = BitcoinAddress(string: "THTR75o8xXAgCTQqpiot2AFRAjvW1tSbVV")!
let amount = Int64(2000000)
let contract = TronContract(from: from, to: to, amount: amount)

let type = TronContractType.transferContract(from: from, to: to, amount: amount)
let contract = TronContract(type: type)
let timestamp: Int64 = 1539295479000
let txTrieRoot = Data(hexString: "64288c2db0641316762a99dbb02ef7c90f968b60f9f2e410835980614332f86d")!
let parentHash = Data(hexString: "00000000002f7b3af4f5f8b9e23a30c530f719f165b742e7358536b280eead2d")!
16 changes: 16 additions & 0 deletions TrustCore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
@@ -95,6 +95,8 @@
8B1A2FA9216FB25A009874E0 /* Tron.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B1A2FA6216FB25A009874E0 /* Tron.pb.swift */; };
8B469DD42174295A0038A049 /* TronAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B469DD32174295A0038A049 /* TronAddress.swift */; };
8B469DD8217485060038A049 /* TronAddressTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B469DD7217485060038A049 /* TronAddressTests.swift */; };
8B55FD2721978B210051D225 /* TronContractType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B55FD2621978B210051D225 /* TronContractType.swift */; };
8B55FD29219795970051D225 /* TronAssetContractTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B55FD28219795970051D225 /* TronAssetContractTest.swift */; };
8B6CF643216F5B8300DDD488 /* TronTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B6CF642216F5B8300DDD488 /* TronTransaction.swift */; };
8B6CF64F216F5D3C00DDD488 /* TronContract.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B6CF64E216F5D3C00DDD488 /* TronContract.swift */; };
8B6CF651216F5F2800DDD488 /* TronBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B6CF650216F5F2800DDD488 /* TronBlock.swift */; };
@@ -226,6 +228,8 @@
8B1A2FA6216FB25A009874E0 /* Tron.pb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tron.pb.swift; sourceTree = "<group>"; };
8B469DD32174295A0038A049 /* TronAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronAddress.swift; sourceTree = "<group>"; };
8B469DD7217485060038A049 /* TronAddressTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronAddressTests.swift; sourceTree = "<group>"; };
8B55FD2621978B210051D225 /* TronContractType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronContractType.swift; sourceTree = "<group>"; };
8B55FD28219795970051D225 /* TronAssetContractTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronAssetContractTest.swift; sourceTree = "<group>"; };
8B6CF642216F5B8300DDD488 /* TronTransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronTransaction.swift; sourceTree = "<group>"; };
8B6CF64E216F5D3C00DDD488 /* TronContract.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronContract.swift; sourceTree = "<group>"; };
8B6CF650216F5F2800DDD488 /* TronBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TronBlock.swift; sourceTree = "<group>"; };
@@ -298,6 +302,7 @@
29EDBD28214AEF6100C86992 /* Tron */ = {
isa = PBXGroup;
children = (
8B55FD2521978B0D0051D225 /* Type */,
8B6CF645216F5C4800DDD488 /* Protobuf */,
29EDBD29214AEF6F00C86992 /* Tron.swift */,
8B6CF642216F5B8300DDD488 /* TronTransaction.swift */,
@@ -554,6 +559,14 @@
name = Frameworks;
sourceTree = "<group>";
};
8B55FD2521978B0D0051D225 /* Type */ = {
isa = PBXGroup;
children = (
8B55FD2621978B210051D225 /* TronContractType.swift */,
);
path = Type;
sourceTree = "<group>";
};
8B6CF645216F5C4800DDD488 /* Protobuf */ = {
isa = PBXGroup;
children = (
@@ -569,6 +582,7 @@
children = (
8B6CF658216F70DC00DDD488 /* TronTransactionSignerTest.swift */,
8B469DD7217485060038A049 /* TronAddressTests.swift */,
8B55FD28219795970051D225 /* TronAssetContractTest.swift */,
);
path = Tron;
sourceTree = "<group>";
@@ -818,6 +832,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8B55FD2721978B210051D225 /* TronContractType.swift in Sources */,
61675570207AD81F00018DC8 /* Function.swift in Sources */,
BB636D3B2121528D0071AE07 /* GenericJSON.swift in Sources */,
5DC50057216FC58F008F426A /* IconSigner.swift in Sources */,
@@ -909,6 +924,7 @@
BB3864AD20904C3900CBF773 /* NamehashTests.swift in Sources */,
BB636D3E212154270071AE07 /* EIP712TypedDataTests.swift in Sources */,
61675573207ADB9B00018DC8 /* FunctionTests.swift in Sources */,
8B55FD29219795970051D225 /* TronAssetContractTest.swift in Sources */,
BBC0729B2191341400A9B082 /* BitcoinUnspentSelectorTests.swift in Sources */,
617F141B2148BA3300619F1A /* PublicKeyTests.swift in Sources */,
BB3864A92090145600CBF773 /* ENSEncoderTests.swift in Sources */,

0 comments on commit b79c5a8

Please sign in to comment.