コード例 #1
0
def main():
    """ Deploy smart contract on all shards """
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--data",
        default=
        "608060405234801561001057600080fd5b5061014c806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063a2f09dfa14610114575b60008034141561005057610111565b60644233604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040518091039020600190048115156100b857fe5b069050603281111515610110573373ffffffffffffffffffffffffffffffffffffffff166108fc346002029081150290604051600060405180830381858888f1935050505015801561010e573d6000803e3d6000fd5b505b5b50005b61011c61011e565b005b5600a165627a7a72305820dfb8255e8f0df762fae8168c8539831acd2852d55c2dc1827fd4348c7ff989d20029",
        type=str,
    )
    parser.add_argument("--jrpc_endpoint", default="localhost:38391", type=str)
    parser.add_argument("--log_jrpc", default=False, type=bool)
    args = parser.parse_args()

    if not args.log_jrpc:
        logging.getLogger("jsonrpcclient.client.request").setLevel(
            logging.WARNING)
        logging.getLogger("jsonrpcclient.client.response").setLevel(
            logging.WARNING)

    data = bytes.fromhex(args.data)
    genesisId = Identity.create_from_key(DEFAULT_ENV.config.GENESIS_KEY)

    endpoint = Endpoint("http://" + args.jrpc_endpoint)
    asyncio.get_event_loop().run_until_complete(
        deploy(endpoint, genesisId, data))
コード例 #2
0
    def test_getCode(self):
        key = bytes.fromhex(
            "c987d4506fb6824639f9a9e3b8834584f5165e94680501d1b0044071cd36c3b3"
        )
        id1 = Identity.create_from_key(key)
        acc1 = Address.create_from_identity(id1, full_shard_key=0)
        created_addr = "0x8531eb33bba796115f56ffa1b7df1ea3acdd8cdd00000000"

        with ClusterContext(
            1, acc1, small_coinbase=True
        ) as clusters, jrpc_server_context(clusters[0].master):
            master = clusters[0].master
            slaves = clusters[0].slave_list

            tx = create_contract_with_storage_transaction(
                shard_state=clusters[0].get_shard_state(2 | 0),
                key=id1.get_key(),
                from_address=acc1,
                to_full_shard_key=acc1.full_shard_key,
            )
            self.assertTrue(slaves[0].add_tx(tx))

            _, block = call_async(master.get_next_block_to_mine(address=acc1))
            self.assertTrue(call_async(clusters[0].get_shard(2 | 0).add_block(block)))

            for using_eth_endpoint in (True, False):
                if using_eth_endpoint:
                    resp = send_request("eth_getCode", created_addr[:-8], "0x0")
                else:
                    resp = send_request("getCode", created_addr)

                self.assertEqual(
                    resp,
                    "0x6080604052600080fd00a165627a7a72305820a6ef942c101f06333ac35072a8ff40332c71d0e11cd0e6d86de8cae7b42696550029",
                )
コード例 #3
0
 def test_create_random_account(self):
     account = Account.new()
     assert len(account.privkey) == 64
     assert len(account.qkc_address.recipient.hex()) == 40
     assert len(account.address) == 48
     identity = Identity.create_from_key(account.identity.key)
     assert account.address == Address.create_from_identity(identity).to_hex()
コード例 #4
0
    def test_getStorageAt(self):
        key = bytes.fromhex(
            "c987d4506fb6824639f9a9e3b8834584f5165e94680501d1b0044071cd36c3b3"
        )
        id1 = Identity.create_from_key(key)
        acc1 = Address.create_from_identity(id1, full_shard_key=0)
        created_addr = "0x8531eb33bba796115f56ffa1b7df1ea3acdd8cdd00000000"

        with ClusterContext(
            1, acc1, small_coinbase=True
        ) as clusters, jrpc_server_context(clusters[0].master):
            master = clusters[0].master
            slaves = clusters[0].slave_list

            tx = create_contract_with_storage_transaction(
                shard_state=clusters[0].get_shard_state(2 | 0),
                key=id1.get_key(),
                from_address=acc1,
                to_full_shard_key=acc1.full_shard_key,
            )
            self.assertTrue(slaves[0].add_tx(tx))

            block = call_async(
                master.get_next_block_to_mine(address=acc1, branch_value=0b10)
            )
            self.assertTrue(call_async(clusters[0].get_shard(2 | 0).add_block(block)))

            for using_eth_endpoint in (True, False):
                if using_eth_endpoint:
                    req = lambda k: send_request(
                        "eth_getStorageAt", created_addr[:-8], k, "0x0"
                    )
                else:
                    req = lambda k: send_request("getStorageAt", created_addr, k)

                # first storage
                response = req("0x0")
                # equals 1234
                self.assertEqual(
                    response,
                    "0x00000000000000000000000000000000000000000000000000000000000004d2",
                )

                # mapping storage
                k = sha3_256(
                    bytes.fromhex(acc1.recipient.hex().zfill(64) + "1".zfill(64))
                )
                response = req("0x" + k.hex())
                self.assertEqual(
                    response,
                    "0x000000000000000000000000000000000000000000000000000000000000162e",
                )

                # doesn't exist
                response = req("0x3")
                self.assertEqual(
                    response,
                    "0x0000000000000000000000000000000000000000000000000000000000000000",
                )
コード例 #5
0
ファイル: accounts.py プロジェクト: braveheart12/QuarkChain
    def new(key=None):
        """
        Create a new account.
        :param key: the private key to import, or None to generate a random one
        """
        if key is None:
            identity = Identity.create_random_identity()
        else:
            if not isinstance(key, str):
                raise Exception("Imported key must be a hexadecimal string")

            identity = Identity.create_from_key(bytes.fromhex(key))
        address = Address.create_from_identity(identity)
        return Account(identity, address)
コード例 #6
0
def main():
    """ Fund the game addresses  """
    parser = argparse.ArgumentParser()
    parser.add_argument("--data", default="a2f09dfa", type=str)  # addFund
    parser.add_argument("--jrpc_endpoint", default="localhost:38391", type=str)
    parser.add_argument("--log_jrpc", default=False, type=bool)
    args = parser.parse_args()

    if not args.log_jrpc:
        logging.getLogger("jsonrpcclient.client.request").setLevel(
            logging.WARNING)
        logging.getLogger("jsonrpcclient.client.response").setLevel(
            logging.WARNING)

    data = bytes.fromhex(args.data)
    genesisId = Identity.create_from_key(DEFAULT_ENV.config.GENESIS_KEY)

    endpoint = Endpoint("http://" + args.jrpc_endpoint)
    asyncio.get_event_loop().run_until_complete(fund(endpoint, genesisId,
                                                     data))
コード例 #7
0
def main():
    """ Fund the game addresses  """
    parser = argparse.ArgumentParser()
    parser.add_argument("--jrpc_endpoint", default="localhost:38391", type=str)
    parser.add_argument("--log_jrpc", default=False, type=bool)
    parser.add_argument("--tqkc_file", required=True, type=str)
    args = parser.parse_args()

    if not args.log_jrpc:
        logging.getLogger("jsonrpcclient.client.request").setLevel(
            logging.WARNING)
        logging.getLogger("jsonrpcclient.client.response").setLevel(
            logging.WARNING)

    genesisId = Identity.create_from_key(DEFAULT_ENV.config.GENESIS_KEY)

    endpoint = Endpoint("http://" + args.jrpc_endpoint)
    addrByAmount = read_addr(args.tqkc_file)
    asyncio.get_event_loop().run_until_complete(
        fund(endpoint, genesisId, addrByAmount))
コード例 #8
0
ファイル: test_core.py プロジェクト: anhhai986/pyquarkchain
    def test_tx_size(self):
        id1 = Identity.create_from_key(b"0" * 32)
        acc1 = Address.create_from_identity(id1, full_shard_key=0)

        evm_tx = EvmTransaction(
            nonce=0,
            gasprice=1,
            startgas=30000,
            to=acc1.recipient,
            value=0,
            data=b"",
            from_full_shard_key=0xFFFF,
            to_full_shard_key=0xFFFF,
            network_id=1,
            gas_token_id=12345,
            transfer_token_id=1234,
        )
        evm_tx.sign(key=id1.get_key())
        tx = TypedTransaction(SerializedEvmTransaction.from_evm_tx(evm_tx))
        self.assertEqual(len(tx.serialize()), TX_MIN_SIZE)

        evm_tx = EvmTransaction(
            nonce=TT256 - 1,
            gasprice=TT256 - 1,
            startgas=TT256 - 1,
            to=acc1.recipient,
            value=TT256 - 1,
            data=b"",
            from_full_shard_key=SHARD_KEY_MAX,
            to_full_shard_key=SHARD_KEY_MAX,
            network_id=1,
            gas_token_id=TOKEN_ID_MAX,
            transfer_token_id=TOKEN_ID_MAX,
        )
        evm_tx.sign(key=id1.get_key())
        tx = TypedTransaction(SerializedEvmTransaction.from_evm_tx(evm_tx))
        self.assertEqual(len(tx.serialize()), TX_MAX_SIZE)