コード例 #1
0
ファイル: test_rpc.py プロジェクト: Lamden/contractdb
    def test_run_all_tx(self):
        self.rpc.driver.flush()

        with open('../../contractdb/contracts/submission.s.py') as f:
            contract = f.read()

        self.rpc.driver.set_contract(
            name='submission',
            code=contract,
        )

        contract = '''
owner = Variable()

@construct
def seed():
    owner.set(ctx.caller)

@export
def get_owner():
    return owner.get()
                '''

        # nakey = nacl.signing.SigningKey.generate()
        #
        # pk = nakey.verify_key.encode().hex()

        nakey = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p)
        pk = nakey.get_verifying_key().to_string().hex()

        tx = make_tx(nakey,
                     contract='submission',
                     func='submit_contract',
                     arguments={
                         'code': contract,
                         'name': 'stu_bucks'
                     })

        tx_2 = make_tx(nakey,
                       contract='stu_bucks',
                       func='get_owner',
                       arguments={})

        result = self.rpc.run_all([tx, tx_2])

        self.assertEqual(result[0]['input'], tx)
        self.assertEqual(result[1]['input'], tx_2)

        owner = result[0]['output']['updates'].get('stu_bucks.owner')
        accessed_owner = result[1]['output']['result']

        self.assertEqual(owner, json.dumps(pk))
        self.assertEqual(accessed_owner, pk)
コード例 #2
0
def submit(name, code_path):
    """ : Submit new contract """
    cmd = ChainCmds()

    nakey = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p)
    pk = nakey.get_verifying_key().to_string().hex()

    code = ""
    with open(code_path, 'r') as f:
        code = f.read()

    tx = make_tx(nakey,
                 contract='submission',
                 func='submit_contract',
                 arguments={
                     'code': code,
                     'name': name
                 })

    command = {'command': 'run', 'arguments': {'transaction': tx}}
    click.echo("Query Command ->")
    click.echo(command)
    res = cmd.server_call(command)
    click.echo("Result :")
    click.echo(res)
コード例 #3
0
ファイル: test_rpc.py プロジェクト: Lamden/contractdb
    def test_run_all_stores_block_and_equals_retrieved_block(self):
        self.rpc.driver.flush()

        with open('../../contractdb/contracts/submission.s.py') as f:
            contract = f.read()

        self.rpc.driver.set_contract(name='submission', code=contract)
        contract = '''
owner = Variable()

@construct
def seed():
    owner.set(ctx.caller)

@export
def get_owner():
    return owner.get()
                '''

        # nakey = nacl.signing.SigningKey.generate()

        nakey = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p)
        pk = nakey.get_verifying_key().to_string().hex()

        tx = make_tx(nakey,
                     contract='submission',
                     func='submit_contract',
                     arguments={
                         'code': contract,
                         'name': 'stu_bucks'
                     })

        from copy import deepcopy

        self.rpc.run(tx)

        tx = make_tx(nakey, contract='stu_bucks', func='get_owner')

        txs = [deepcopy(tx) for _ in range(10)]

        block = self.rpc.run_all(txs)

        got_block = self.rpc.blocks.get_block_by_index(
            self.rpc.blocks.height())

        self.assertDictEqual(block, got_block)
コード例 #4
0
    def test_make_tx(self):
        # nakey = nacl.signing.SigningKey.generate()
        #
        # pk = nakey.verify_key.encode().hex()

        nakey = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p)
        pk = nakey.get_verifying_key().to_string().hex()

        tx = {
            'sender': pk,
            'signature': None,
            'payload': {
                'contract': 'submission',
                'function': 'submit_contract',
                'arguments': {
                    'code': 'test',
                    'name': 'stu_bucks'
                }
            }
        }

        message = encode(tx['payload']).encode()

        sig = nakey.sign_deterministic(message, hashfunc=hashlib.sha256).hex()

        tx['signature'] = sig

        made_tx = make_tx(nakey,
                          contract='submission',
                          func='submit_contract',
                          arguments={
                              'code': 'test',
                              'name': 'stu_bucks'
                          })

        self.assertEqual(made_tx, tx)