예제 #1
0
def test_builder_with_standard_token_manifest(standard_token_package,
                                              dummy_ipfs_backend, monkeypatch):
    root, expected_manifest, compiler_output = standard_token_package
    ipfs_backend = get_ipfs_backend()

    monkeypatch.chdir(root)
    manifest = build(
        {},
        package_name("standard-token"),
        manifest_version("ethpm/3"),
        version("1.0.0"),
        pin_source("StandardToken", compiler_output, ipfs_backend),
        pin_source("Token", compiler_output, ipfs_backend),
        contract_type("StandardToken",
                      compiler_output,
                      abi=True,
                      devdoc=True,
                      source_id=True),
        contract_type("Token",
                      compiler_output,
                      abi=True,
                      devdoc=True,
                      userdoc=True,
                      source_id=True),
        validate(),
    )
    assert manifest == expected_manifest
예제 #2
0
def test_builder_with_alias_and_select_contract_types(owned_package_devdoc):
    _, _, compiler_output = owned_package_devdoc

    manifest = build(
        BASE_MANIFEST,
        contract_type(
            "Owned",
            compiler_output,
            alias="OwnedAlias",
            abi=True,
            natspec=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            compiler=True,
        ),
        validate(),
    )

    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"])
    expected = assoc(
        BASE_MANIFEST,
        "contract_types",
        {"OwnedAlias": assoc(contract_type_data, "contract_type", "Owned")},
    )
    assert manifest == expected
예제 #3
0
def test_builder_raises_exception_if_selected_contract_type_missing_from_solc(
        owned_package):
    _, _, compiler_output = owned_package
    with pytest.raises(ManifestBuildingError):
        build(
            BASE_MANIFEST,
            contract_type("Owned", compiler_output, abi=True, natspec=True),
        )
예제 #4
0
def test_builder_manages_duplicate_compilers(owned_package):
    _, _, compiler_output = owned_package

    manifest = build(
        BASE_MANIFEST,
        contract_type(
            "Owned",
            compiler_output,
            abi=True,
            compiler=True,
            source_id=True,
        ),
        contract_type(
            "Owned",
            compiler_output,
            alias="OwnedAlias",
            abi=True,
            compiler=True,
            source_id=True,
        ),
        validate(),
    )
    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"], "Owned.sol")
    compiler_data = contract_type_data.pop("compiler")
    contract_type_data.pop('deploymentBytecode')
    contract_type_data.pop('devdoc')
    contract_type_data.pop('userdoc')
    compiler_data_with_contract_types = assoc(compiler_data, 'contractTypes',
                                              ['Owned', 'OwnedAlias'])
    expected_with_contract_types = assoc(
        BASE_MANIFEST,
        "contractTypes",
        {
            "Owned": assoc(contract_type_data, "contractType", "Owned"),
            "OwnedAlias": assoc(contract_type_data, "contractType", "Owned"),
        },
    )
    expected_with_contract_types['contractTypes']['Owned'].pop("contractType")
    expected = assoc(expected_with_contract_types, 'compilers',
                     [compiler_data_with_contract_types])
    assert manifest == expected
예제 #5
0
def test_builder_with_default_contract_types(owned_package):
    _, _, compiler_output = owned_package

    manifest = build(BASE_MANIFEST, contract_type("Owned", compiler_output),
                     validate())

    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"])
    expected = assoc(BASE_MANIFEST, "contract_types",
                     {"Owned": contract_type_data})
    assert manifest == expected
예제 #6
0
def test_builder_raises_exception_if_selected_contract_type_missing_from_solc(
        owned_package):
    _, _, compiler_output = owned_package
    with pytest.raises(ManifestBuildingError,
                       match="runtimeBytecode not available"):
        build(
            BASE_MANIFEST,
            contract_type("Owned",
                          compiler_output,
                          abi=True,
                          runtime_bytecode=True),
        )
예제 #7
0
def test_builder_without_alias_and_with_select_contract_types(owned_package):
    _, _, compiler_output = owned_package

    manifest = build(BASE_MANIFEST,
                     contract_type("Owned", compiler_output, abi=True),
                     validate())

    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"])
    selected_data = {
        k: v
        for k, v in contract_type_data.items() if k != "deployment_bytecode"
    }
    expected = assoc(BASE_MANIFEST, "contract_types", {"Owned": selected_data})
    assert manifest == expected
예제 #8
0
def test_builder_with_default_contract_types(owned_package):
    _, _, compiler_output = owned_package

    manifest = build(BASE_MANIFEST, contract_type("Owned", compiler_output),
                     validate())

    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"], "Owned.sol")
    compilers_data = contract_type_data.pop('compiler')
    compilers_data["contractTypes"] = ["Owned"]
    expected_with_contract_type = assoc(BASE_MANIFEST, "contractTypes",
                                        {"Owned": contract_type_data})
    expected = assoc(expected_with_contract_type, "compilers",
                     [compilers_data])
    assert manifest == expected
예제 #9
0
def test_builder_with_single_alias_kwarg(owned_package):
    _, _, compiler_output = owned_package

    manifest = build(
        BASE_MANIFEST,
        contract_type("Owned", compiler_output, alias="OwnedAlias"),
        validate(),
    )

    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"])
    expected = assoc(
        BASE_MANIFEST,
        "contract_types",
        {"OwnedAlias": assoc(contract_type_data, "contract_type", "Owned")},
    )
    assert manifest == expected
예제 #10
0
def test_builder_without_alias_and_with_select_contract_types(owned_package):
    _, _, compiler_output = owned_package

    manifest = build(
        BASE_MANIFEST,
        contract_type("Owned", compiler_output, abi=True, source_id=True),
        validate())

    contract_type_data = normalize_contract_type(
        compiler_output["Owned.sol"]["Owned"], "Owned.sol")
    omitted_fields = ("deploymentBytecode", "userdoc", "devdoc", "compiler")
    selected_data = {
        k: v
        for k, v in contract_type_data.items() if k not in omitted_fields
    }
    expected = assoc(BASE_MANIFEST, "contractTypes", {"Owned": selected_data})
    assert manifest == expected
예제 #11
0
파일: solc.py 프로젝트: si3mshady/ethpm-cli
def build_contract_types(
        contract_types: Iterable[str],
        solc_output: Dict[str, Any]) -> Iterable[Callable[..., Manifest]]:
    return (b.contract_type(ctype, solc_output) for ctype in contract_types)
예제 #12
0
def generate_contract_types(
        compiler_output: Dict[str, Any]) -> Iterable[Dict[str, Any]]:
    for path in compiler_output.keys():
        contract_type = path.split("/")[-1].split(".")[0]
        yield b.contract_type(contract_type, compiler_output)
예제 #13
0
def test_builder_with_link_references(registry_package, dummy_ipfs_backend,
                                      monkeypatch):
    root, expected_manifest, compiler_output = registry_package
    monkeypatch.chdir(root)
    inliner = source_inliner(compiler_output)
    manifest = build(
        {},
        package_name("solidity-registry"),
        manifest_version("2"),
        version("2.0.0"),
        inliner("Authorized"),
        inliner("IndexedOrderedSetLib"),
        inliner("PackageDB"),
        inliner("PackageRegistry"),
        inliner("PackageRegistryInterface"),
        inliner("ReleaseDB"),
        inliner("ReleaseValidator"),
        contract_type(
            "AuthorityInterface",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
        ),
        contract_type(
            "Authorized",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        contract_type(
            "AuthorizedInterface",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
        ),
        contract_type(
            "WhitelistAuthority",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        contract_type(
            "WhitelistAuthorityInterface",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
        ),
        contract_type(
            "IndexedOrderedSetLib",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        contract_type(
            "PackageDB",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        contract_type(
            "PackageRegistry",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        contract_type(
            "PackageRegistryInterface",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
        ),
        contract_type(
            "ReleaseDB",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        contract_type(
            "ReleaseValidator",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
            natspec=True,
            compiler=True,
        ),
        validate(),
    )
    assert manifest == expected_manifest
예제 #14
0
def test_builder_with_link_references(registry_package, dummy_ipfs_backend,
                                      monkeypatch):
    root, expected_manifest, compiler_output = registry_package
    ipfs_backend = get_ipfs_backend()
    monkeypatch.chdir(root)
    pinner = source_pinner(compiler_output, ipfs_backend)
    manifest = build(
        {},
        package_name("registry"),
        manifest_version("2"),
        version("1.0.1"),
        pinner("IndexedOrderedSetLib"),
        pinner("PackageDB"),
        pinner("PackageRegistry"),
        pinner("PackageRegistryInterface"),
        pinner("ReleaseDB"),
        pinner("ReleaseValidator"),
        contract_type(
            "IndexedOrderedSetLib",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
        ),
        contract_type(
            "PackageDB",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
        ),
        contract_type(
            "PackageRegistry",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
        ),
        contract_type(
            "PackageRegistryInterface",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
        ),
        contract_type(
            "ReleaseDB",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
        ),
        contract_type(
            "ReleaseValidator",
            compiler_output,
            abi=True,
            deployment_bytecode=True,
            runtime_bytecode=True,
        ),
        validate(),
    )
    assert manifest == expected_manifest