Exemplo n.º 1
0
def test_from_type_and_payload(
    network_type, payload, network_id, version, should_throw
):
    if should_throw:
        with pytest.raises(ValueError) as e:
            AssetAddress.from_type_and_payload(
                network_type, payload, network_id=network_id, version=version
            )
    else:
        try:
            AssetAddress.from_type_and_payload(
                network_type, payload, network_id=network_id, version=version
            )
        except Exception as e:  # noqa : E841
            raise pytest.fail(f"Unexpected exception: {e}")
Exemplo n.º 2
0
def test_from_type_and_payload_mutisig():
    sig = MultiSig(
        2,
        1,
        [
            H160("1111111111111111111111111111111111111111"),
            H160("2222222222222222222222222222222222222222"),
        ],
    )
    address1 = AssetAddress.from_string(
        "tcaqypsyqg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyfzyg3zyg3zyg3zyg3zyg3zyg3zyg3zygsn28hf0"
    )
    address2 = AssetAddress.from_type_and_payload(3, sig, network_id="tc")

    assert address1.value == address2.value
Exemplo n.º 3
0
    def create_mint_transaction(self, recipient: Union[AssetAddress, str]):
        if self.network_id is None:
            raise ValueError("networkId is undefined")
        if self.shard_id is None:
            raise ValueError("shardId is undefined")

        return MintAsset(
            self.network_id,
            self.shard_id,
            self.metadata,
            AssetMintOutput(self.supply, AssetAddress.ensure(recipient)),
            self.approver,
            self.registrar,
            self.allowd_script_hashes,
            [],
        )
Exemplo n.º 4
0
def test_from_string_mutisig():
    address = AssetAddress.from_string(
        "tcaqypsyqg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyfzyg3zyg3zyg3zyg3zyg3zyg3zyg3zygsn28hf0"
    )
    payload = address.payload
    network_type = address.address_type

    assert network_type == 3

    n, m, pubkeys = payload

    assert n == 2
    assert m == 1

    assert pubkeys[0] == H160("1111111111111111111111111111111111111111")
    assert pubkeys[1] == H160("2222222222222222222222222222222222222222")
Exemplo n.º 5
0
    def create_mint_asset_transaction(
        self,
        recipient: AssetAddress,
        scheme: AssetScheme = None,
        approvals: List[str] = None,
        network_id: str = None,
        shard_id: int = None,
        metadata=None,
        approver: PlatformAddress = None,
        registrar: PlatformAddress = None,
        allowed_script_hashes: List[H160] = None,
        supply: U64 = None,
    ):
        if approvals is None:
            approvals = []
        if scheme is None and (shard_id is None or metadata is None):
            raise ValueError(
                f"Either scheme params or proper arguments should be provided {scheme}"
            )

        network_id = self.network_id if network_id is None else network_id
        shard_id = shard_id
        supply = U64(U64.MAX_VALUE) if supply is None else supply

        check_metadata(metadata)
        metadata = metadata if isinstance(metadata, str) else str(metadata)
        check_asset_address_recipient(recipient)
        check_network_id(network_id)
        if shard_id is None:
            raise ValueError("shard_id is None")
        check_shard_id(shard_id)
        check_approver(approver)
        check_registrar(registrar)
        check_amount(supply)

        return MintAsset(
            network_id,
            shard_id,
            metadata,
            AssetMintOutput(U64(supply), None, None,
                            AssetAddress.ensure(recipient)),
            None if approver is None else PlatformAddress.ensure(approver),
            None if registrar is None else PlatformAddress.ensure(registrar),
            [] if allowed_script_hashes is None else allowed_script_hashes,
            approvals,
        )
Exemplo n.º 6
0
    def create_transfer_transaction(
        self,
        network_id: str,
        recipient: List = None,
        timelock: Union[Timelock, None] = None,
        metadata="",
        approvals: List[str] = None,
        expiration: int = None,
    ):
        if recipient is None:
            recipient = []
        if approvals is None:
            approvals = []

        from .assettransferoutput import AssetTransferOutput
        from .transferasset import TransferAsset

        return TransferAsset(
            [],
            [AssetTransferInput(self.out_point, timelock, bytes(), bytes())],
            list(
                map(
                    lambda x: AssetTransferOutput(
                        self.asset_type,
                        self.shard_id,
                        x.quantity,
                        AssetAddress.ensure(x.address),
                    ),
                    recipient,
                )),
            [],
            network_id,
            metadata,
            approvals,
            expiration,
        )
Exemplo n.º 7
0
def check_asset_address_recipient(recipient: AssetAddress):
    if not AssetAddress.check(recipient):
        raise ValueError(
            f"Expected recipient param to be a AssetAddress but found {recipient}"
        )
Exemplo n.º 8
0
 def create_address(self, passphrase=None):
     key_hash = self.raw_keystore.asset.create_key(passphrase)
     return AssetAddress.from_type_and_payload(1,
                                               key_hash,
                                               network_id=self.network_id)
Exemplo n.º 9
0
def from_string():
    assert AssetAddress.from_string(validAddress) == validAddress
    with pytest.raises(ValueError):
        AssetAddress.from_string("cccqyqjmvml2hdp8s8xzqnr57r8ywtduy2u6gcq89vff")
Exemplo n.º 10
0
def test_ensure():
    assert AssetAddress.ensure(validAddressString) == validAddress
    assert AssetAddress.ensure(validAddress) == validAddress
Exemplo n.º 11
0
def test_check():
    assert AssetAddress.check(validAddressString)
    assert AssetAddress.check(validAddress)
    assert not AssetAddress.check(invalidAddressString)
Exemplo n.º 12
0
import inspect

import pytest

from codechain.primitives import AssetAddress
from codechain.primitives import H160
from codechain.primitives import MultiSig

validAddressString = "ccaqyqjmvml2hdp8s8xzqnr57r8ywtduy2u6gcq89vffl"
validAddress = AssetAddress.from_string(validAddressString)
invalidAddressString = "ccaqyqjmvml2hdp8s8xzqnr57r8ywtduy2u6gcq89vff"


def test_import():
    assert inspect.isclass(AssetAddress)
    assert inspect.isclass(MultiSig)


def test_check():
    assert AssetAddress.check(validAddressString)
    assert AssetAddress.check(validAddress)
    assert not AssetAddress.check(invalidAddressString)


def test_ensure():
    assert AssetAddress.ensure(validAddressString) == validAddress
    assert AssetAddress.ensure(validAddress) == validAddress


@pytest.mark.parametrize(
    "network_type, payload, network_id, version, should_throw",