Ethers Wrap Example
This documentation demonstrates the use of PolywrapClient
to interact with the Ethereum network. The objective is to retrieve
balance in Wei and Eth, and to sign typed data.
Setup and Dependencies
First, we import the required libraries and modules:
from polywrap import (
Uri,
PolywrapClient,
PolywrapClientConfigBuilder,
ethereum_wallet_plugin,
Connections,
Connection,
sys_bundle
)
import json
Wrap URIs Initialization
Here, we define the URIs for ethers core and utility wraps:
ethers_core_uri = Uri.from_str("wrapscan.io/polywrap/ethers@1.0.0")
ethers_util_uri = Uri.from_str("wrapscan.io/polywrap/ethers-utils@1.0.0")
Configuring the Polywrap Client
For interacting with the Ethereum network, we configure the
PolywrapClient:
builder = PolywrapClientConfigBuilder()
builder.add_bundle(sys_bundle)
mainnet_connection = Connection.from_node(
"https://mainnet.infura.io/v3/f1f688077be642c190ac9b28769daecf",
"0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d" # Caution: Private key
)
connections = Connections({
"mainnet": mainnet_connection,
}, default_network="mainnet")
wallet_plugin = ethereum_wallet_plugin(connections)
builder.set_package(Uri.from_str("wrapscan.io/polywrap/ethereum-wallet@1.0"), wallet_plugin)
config = builder.build()
client = PolywrapClient(config)
Fetching Balance
Retrieve the balance in both Wei and Eth:
balance = client.invoke(
uri=ethers_core_uri,
method="getBalance",
args={"address": "0x00000000219ab540356cbb839cbe05303d7705fa"}
)
print(f"Balance in Wei: {balance}")
assert int(balance) > 0
balance_in_eth = client.invoke(
uri=ethers_util_uri,
method="toEth",
args={"wei": balance}
)
print(f"Balance in Eth: {balance_in_eth}")
Signing Typed Data
To sign typed data, we define domain data, message, and types:
domain_data = {
"name": "Ether Mail",
"version": "1",
"chainId": 1,
"verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
}
message = {
"from": {"name": "Cow", "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"},
"to": {"name": "Bob", "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"},
"contents": "Hello, Bob!"
}
types = {
"EIP712Domain": [
{"type": "string", "name": "name"},
{"type": "string", "name": "version"},
{"type": "uint256", "name": "chainId"},
{"type": "address", "name": "verifyingContract"}
],
"Person": [
{"name": "name", "type": "string"},
{"name": "wallet", "type": "address"}
],
"Mail": [
{"name": "from", "type": "Person"},
{"name": "to", "type": "Person"},
{"name": "contents", "type": "string"}
]
}
payload = json.dumps({
"domain": domain_data,
"types": types,
"primaryType": "Mail",
"message": message
})
sign_typed_data_result = client.invoke(
uri=ethers_core_uri,
method="signTypedData",
args={"payload": payload}
)
print(f"Signed typed data: {sign_typed_data_result}")
assert sign_typed_data_result == "0x12bdd486cb42c3b3c414bb04253acfe7d402559e7637562987af6bd78508f38623c1cc09880613762cc913d49fd7d3c091be974c0dee83fb233300b6b58727311c"
Conclusion
This example demonstrates how to use the PolywrapClient to interact with the Ethereum Network.
For more information on the PolywrapClient, please refer to the
Polywrap Python Client documentation.