示例#1
0
    def test_sign_transaction(self):
        pem = self.testdata.joinpath("keys", "alice.pem")

        # With data
        transaction = PlainTransaction()
        transaction.nonce = 0
        transaction.value = "0"
        transaction.sender = "erd1l453hd0gt5gzdp7czpuall8ggt2dcv5zwmfdf3sd3lguxseux2fsmsgldz"
        transaction.receiver = "erd188nydpkagtpwvfklkl2tn0w6g40zdxkwfgwpjqc2a2m2n7ne9g8q2t22sr"
        transaction.gasPrice = 200000000000000
        transaction.gasLimit = 500000000
        transaction.data = "foo"
        payload = TransactionPayloadToSign(transaction)
        signature = signing.sign_transaction(payload, pem)

        self.assertEqual("8e68002bdd45d04508b7325d1cab9195680acf03a4cd5cba23629a85074bf92a88275f1f2bc3c2bd19d8f5cd62bde83186d86932b04e0f5b88a374a824547009", signature)

        # Without data
        transaction = PlainTransaction()
        transaction.nonce = 0
        transaction.value = "0"
        transaction.sender = "erd1l453hd0gt5gzdp7czpuall8ggt2dcv5zwmfdf3sd3lguxseux2fsmsgldz"
        transaction.receiver = "erd188nydpkagtpwvfklkl2tn0w6g40zdxkwfgwpjqc2a2m2n7ne9g8q2t22sr"
        transaction.gasPrice = 200000000000000
        transaction.gasLimit = 500000000
        transaction.data = ""
        payload = TransactionPayloadToSign(transaction)
        signature = signing.sign_transaction(payload, pem)

        self.assertEqual("4e160bcafb6cb8ab8fc3260d3faf24bf7ce1205b5685adb457803db6d67c648a614308d8354e40b40fbb90c227046d6997493f798b92acb1b4bc49173939e703", signature)
示例#2
0
    def test_serialize_transaction_payload(self):
        # With data field
        transaction = PlainTransaction()
        transaction.nonce = 0
        transaction.value = "42"
        transaction.sender = "alice"
        transaction.receiver = "bob"
        transaction.gasPrice = 43
        transaction.gasLimit = 44
        transaction.data = "foobar"
        serialized = TransactionPayloadToSign(transaction).to_json().decode()
        self.assertEqual("""{"nonce":0,"value":"42","receiver":"bob","sender":"alice","gasPrice":43,"gasLimit":44,"data":"foobar"}""", serialized)

        # Without data field
        transaction.data = ""
        serialized = TransactionPayloadToSign(transaction).to_json().decode()
        self.assertEqual("""{"nonce":0,"value":"42","receiver":"bob","sender":"alice","gasPrice":43,"gasLimit":44}""", serialized)

        # With actual addresses
        transaction = PlainTransaction()
        transaction.nonce = 0
        transaction.value = "0"
        transaction.sender = "erd1l453hd0gt5gzdp7czpuall8ggt2dcv5zwmfdf3sd3lguxseux2fsmsgldz"
        transaction.receiver = "erd188nydpkagtpwvfklkl2tn0w6g40zdxkwfgwpjqc2a2m2n7ne9g8q2t22sr"
        transaction.gasPrice = 200000000000000
        transaction.gasLimit = 500000000
        transaction.data = "foo"
        serialized = TransactionPayloadToSign(transaction).to_json().decode()
        self.assertEqual("""{"nonce":0,"value":"0","receiver":"erd188nydpkagtpwvfklkl2tn0w6g40zdxkwfgwpjqc2a2m2n7ne9g8q2t22sr","sender":"erd1l453hd0gt5gzdp7czpuall8ggt2dcv5zwmfdf3sd3lguxseux2fsmsgldz","gasPrice":200000000000000,"gasLimit":500000000,"data":"foo"}""", serialized)
示例#3
0
    def test_sign_transaction_trust_wallet_scenario(self):
        pem = self.testdata.joinpath("keys", "alice.pem")

        # With data
        transaction = PlainTransaction()
        transaction.nonce = 0
        transaction.value = "0"
        transaction.sender = "erd1l453hd0gt5gzdp7czpuall8ggt2dcv5zwmfdf3sd3lguxseux2fsmsgldz"
        transaction.receiver = "erd1cux02zersde0l7hhklzhywcxk4u9n4py5tdxyx7vrvhnza2r4gmq4vw35r"
        transaction.gasPrice = 200000000000000
        transaction.gasLimit = 500000000
        transaction.data = "foo"
        payload = TransactionPayloadToSign(transaction)
        signature = signing.sign_transaction(payload, pem)

        self.assertEqual("3c807eddeb5c9d7864ca3a97da8d2bffcef84826228567d4c7478812fdd09858f438a5cade3341bb2b02a2a8717d271b9163735d65f61795f5dd946f519fc500", signature)

        # Without data
        transaction = PlainTransaction()
        transaction.nonce = 0
        transaction.value = "0"
        transaction.sender = "erd1l453hd0gt5gzdp7czpuall8ggt2dcv5zwmfdf3sd3lguxseux2fsmsgldz"
        transaction.receiver = "erd1cux02zersde0l7hhklzhywcxk4u9n4py5tdxyx7vrvhnza2r4gmq4vw35r"
        transaction.gasPrice = 200000000000000
        transaction.gasLimit = 500000000
        transaction.data = ""
        payload = TransactionPayloadToSign(transaction)
        signature = signing.sign_transaction(payload, pem)

        self.assertEqual("39ab0e18bfce04bf53c9610faa3b9e7cecfca919510a7631e529e9086279b70a4832df32a5d1b8fdceb4e9082f2995da97f9195532c8d611ee749bc312cbf90c", signature)
示例#4
0
def send_one_tx(proxy, sender, receiver_address):
    plain = PlainTransaction()
    plain.nonce = sender.nonce
    plain.value = "20000000000000000"  # 0.02 ERD
    plain.sender = sender.address.bech32()
    plain.receiver = receiver_address
    plain.gasPrice = 200000000000
    plain.gasLimit = 50000
    plain.data = ""

    payload = TransactionPayloadToSign(plain)
    signature = signing.sign_transaction(payload, sender.pem_file)
    prepared = PreparedTransaction(plain, signature)
    prepared.send(proxy)

    global counter
    counter += 1
    print(f"Sent transaction #{counter}, with nonce = {plain.nonce}.")
示例#5
0
    def prepare_execute_transaction(self, caller, function, arguments,
                                    gas_price, gas_limit, value):
        arguments = arguments or []
        gas_price = int(gas_price or config.DEFAULT_GAS_PRICE)
        gas_limit = int(gas_limit)
        value = str(value or "0")

        plain = PlainTransaction()
        plain.nonce = caller.nonce
        plain.value = value
        plain.sender = caller.address.bech32()
        plain.receiver = self.address.bech32()
        plain.gasPrice = gas_price
        plain.gasLimit = gas_limit
        plain.data = self.prepare_execute_transaction_data(function, arguments)

        payload = TransactionPayloadToSign(plain)
        signature = signing.sign_transaction(payload, caller.pem_file)
        prepared = PreparedTransaction(plain, signature)
        return prepared
示例#6
0
    def prepare_deploy_transaction(self, owner, arguments, gas_price,
                                   gas_limit, value):
        arguments = arguments or []
        gas_price = int(gas_price or config.DEFAULT_GAS_PRICE)
        gas_limit = int(gas_limit or config.DEFAULT_GAS_LIMIT)
        value = str(value or "0")

        plain = PlainTransaction()
        plain.nonce = owner.nonce
        plain.value = value
        plain.sender = owner.address.bech32()
        plain.receiver = Address.zero().bech32()
        plain.gasPrice = gas_price
        plain.gasLimit = gas_limit
        plain.data = self.prepare_deploy_transaction_data(arguments)

        payload = TransactionPayloadToSign(plain)
        signature = signing.sign_transaction(payload, owner.pem_file)
        prepared = PreparedTransaction(plain, signature)
        return prepared