Ejemplo n.º 1
0
def deploy_mocks(decimals=18, initial_value=2000):
    """
    Use this script if you want to deploy mocks to a testnet
    """
    # Set a default gas price
    priority_fee("1 gwei")
    print(f"The active network is {network.show_active()}")
    print("Deploying Mocks...")
    account = get_account()
    print("Deploying Mock Link Token...")
    link_token = LinkToken.deploy({"from": account})
    print("Deploying Mock Price Feed...")
    mock_price_feed = MockV3Aggregator.deploy(decimals, initial_value,
                                              {"from": account})
    print(f"Deployed to {mock_price_feed.address}")
    print("Deploying Mock VRFCoordinator...")
    mock_vrf_coordinator = VRFCoordinatorMock.deploy(
        link_token.address, {
            "from": account,
            "gas_price": chain.base_fee
        })
    print(f"Deployed to {mock_vrf_coordinator.address}")

    print("Deploying Mock Oracle...")
    mock_oracle = MockOracle.deploy(link_token.address, {"from": account})
    print(f"Deployed to {mock_oracle.address}")
    print("Mocks Deployed!")
Ejemplo n.º 2
0
def get_link_token(get_account):
    if network.show_active() in ['development', 'mainnet-fork']:
        link_token = LinkToken.deploy({'from': get_account})
        return link_token
    if network.show_active() in config['networks']:
        return Contract.from_abi(
            "vrf_coordinator_mock",
            config['networks'][network.show_active()]['link_token'],
            LinkToken.abi)
    else:
        pytest.skip('Invalid network/link token specified ')
Ejemplo n.º 3
0
def test_chainlink_api_call_without_link(job_id, dev_account, node_account,
                                         chainlink_fee):
    # Arrange
    link_token = LinkToken.deploy({"from": dev_account})
    oracle = MockOracle.deploy(link_token.address, {"from": dev_account})
    api_consumer = APIConsumer.deploy(oracle.address, job_id, chainlink_fee,
                                      link_token.address,
                                      {"from": dev_account})
    oracle.setFulfillmentPermission(node_account, True, {"from": dev_account})
    # Act / Assert
    with pytest.raises(brownie.exceptions.VirtualMachineError):
        api_consumer.requestVolumeData({"from": dev_account})
Ejemplo n.º 4
0
def get_link_token(get_account):
    if network.show_active() == 'development' or 'fork' in network.show_active(
    ):
        link_token = LinkToken.deploy({'from': get_account})
        return link_token
    if network.show_active() in config['networks']:
        return Contract.from_abi(
            "link_token",
            config['networks'][network.show_active()]['link_token'],
            LinkToken.abi)
    else:
        pytest.skip('Invalid network/link token specified ')
Ejemplo n.º 5
0
def get_link_token(get_account):
    if network.show_active() == "development" or "fork" in network.show_active(
    ):
        link_token = LinkToken.deploy({"from": get_account})
        return link_token
    if network.show_active() in config["networks"]:
        return Contract.from_abi(
            "link_token",
            config["networks"][network.show_active()]["link_token"],
            LinkToken.abi,
        )
    else:
        pytest.skip("Invalid network/link token specified ")
Ejemplo n.º 6
0
def link_token(pm, deployer):
    if network.show_active() == "development" or "fork" in network.show_active(
    ):
        # link = pm("alphachainio/[email protected]").LinkToken
        yield LinkToken.deploy({"from": deployer})

    if network.show_active() in config["networks"]:
        yield Contract.from_abi(
            "link_token",
            config["networks"][network.show_active()]["link_token"],
            LinkToken.abi,
        )

    else:
        pytest.skip("Invalid network/link token specified ")
Ejemplo n.º 7
0
def test_chainlink_api_call_with_link(job_id, dev_account, node_account,
                                      chainlink_fee):
    # Arrange
    link_token = LinkToken.deploy({"from": dev_account})
    oracle = MockOracle.deploy(link_token.address, {"from": dev_account})
    api_consumer = APIConsumer.deploy(oracle.address, job_id, chainlink_fee,
                                      link_token.address,
                                      {"from": dev_account})
    oracle.setFulfillmentPermission(node_account, True, {"from": dev_account})
    link_token.transfer(api_consumer.address, chainlink_fee,
                        {"from": dev_account})
    # Act
    transaction_data = api_consumer.requestVolumeData({"from": dev_account})
    # Assert
    assert oracle.address == transaction_data.logs[3].address
Ejemplo n.º 8
0
def deploy_mocks(decimals=DECIMALS, initial_value=INITIAL_VALUE):
    """
    Use this script if you want to deploy mocks to a testnet
    """
    print(f"The active network is {network.show_active()}")
    print("Deploying Mocks...")
    account = get_account()
    print("Deploying Mock Link Token...")
    link_token = LinkToken.deploy({"from": account})
    print("Deploying Mock Price Feed...")
    mock_price_feed = MockV3Aggregator.deploy(decimals, initial_value,
                                              {"from": account})
    print(f"Deployed to {mock_price_feed.address}")
    print("Deploying Mock VRFCoordinator...")
    mock_vrf_coordinator = VRFCoordinatorMock.deploy(link_token.address,
                                                     {"from": account})
    print(f"Deployed to {mock_vrf_coordinator.address}")

    print("Deploying Mock Oracle...")
    mock_oracle = MockOracle.deploy(link_token.address, {"from": account})
    print(f"Deployed to {mock_oracle.address}")
    print("Mocks Deployed!")
Ejemplo n.º 9
0
def test_chainlink_api_call_with_link_fulfilled(job_id, dev_account,
                                                node_account, chainlink_fee,
                                                expiry_time):
    # Arrange
    link_token = LinkToken.deploy({"from": dev_account})
    oracle = MockOracle.deploy(link_token.address, {"from": dev_account})
    api_consumer = APIConsumer.deploy(
        oracle.address,
        "29fa9aa13bf1468788b7cc4a500a45b8",
        chainlink_fee,
        link_token.address,
        {"from": dev_account},
    )
    oracle.setFulfillmentPermission(node_account, True, {"from": dev_account})
    link_token.transfer(api_consumer.address, chainlink_fee * 3,
                        {"from": dev_account})

    transaction_receipt = api_consumer.requestVolumeData({"from": dev_account})
    reqid = transaction_receipt.events["ChainlinkRequested"]["id"]
    selector = ""
    # Act
    for key, value in api_consumer.__dict__["selectors"].items():
        if value == "fulfill":
            selector = key
    # We cheated and added `exp_time` to a public variable in the Oracle.sol
    # This is all needed because fulfillOracleRequest hashes all the params and checks to make sure the
    # Hashes all match
    # We are using a modified Oracle.sol
    successful = oracle.fulfillOracleRequest(
        reqid,
        chainlink_fee,
        api_consumer.address,
        selector,
        oracle.exp_time(),
        "",
        {"from": node_account},
    )
    assert successful.status == 1
def deploy_mocks(decimals=DECIMALS, initial_value=INITIAL_VALUE):
    account = get_account()
    MockV3Aggregator.deploy(decimals, initial_value, {"from": account})
    link_token = LinkToken.deploy({"from": account})
    VRFCoordinatorMock.deploy(link_token.address, {"from": account})
    print("Deployed!")