Mix.install([:poison, :web3_move_ex])
Move(Aptos/Starcoin/Sui) SDK impl in elixir!
See the using example in:
https://github.com/WeLightProject/move_sdk_ex_liveview_example
- Aptos
- RPC Implementation
- Read Resource
- Starcoin
- Readonly Function
- Read Resource
- Send Transaction
- Deploy Contract
- Chain Interactor
- Sui
If available in Hex, the package can be installed
by adding web3_move_ex
to your list of dependencies in mix.exs
:
def deps do
[
{:web3_move_ex, "~> 0.1.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/web3_move_ex.
Namespace: Web3MoveEx.Aptos
Namespace: Web3MoveEx.Starcoin
alias Web3MoveEx.Starcoin
# Create a Connect to local node
client_local = Starcoin.Client.connect()
IO.puts(inspect(client_local))
# Create a Connect to Barnard node
client_barnard = Starcoin.Client.connect("https://barnard-seed.starcoin.org")
IO.puts(inspect(client_barnard))
client_mainnet = Starcoin.Client.connect("https://main-seed.starcoin.org")
IO.puts(inspect(client_mainnet))
%Web3MoveEx.Starcoin.Client{chain_id: 254, endpoint: "http://localhost:9851"}
%Web3MoveEx.Starcoin.Client{chain_id: 251, endpoint: "https://barnard-seed.starcoin.org"}
%Web3MoveEx.Starcoin.Client{chain_id: 1, endpoint: "https://main-seed.starcoin.org"}
:ok
Starcoin using the Ed25519 Algorithm for the Account.
{:ok, %{address_hex: address_hex}} =
payload =
Starcoin.Account.from_private_key(
0xA95ED7F73DE144BC8F64C0266BE38ED6AF0903762E2503D3C7C71CDA69EEA99A
)
{:ok,
%Web3MoveEx.Starcoin.Account{
address: <<17, 104, 232, 143, 252, 92, 236, 83, 179, 152, 180, 45, 97, 136, 91, 187>>,
address_hex: "0x1168e88ffc5cec53b398b42d61885bbb",
public_key: <<182, 132, 185, 94, 183, 12, 78, 210, 69, 176, 65, 101, 54, 159, 176, 213, 17, 104,
232, 143, 252, 92, 236, 83, 179, 152, 180, 45, 97, 136, 91, 187>>,
sequence_number: 0,
signing_key: %Web3MoveEx.Starcoin.SigningKey{
private_key: <<169, 94, 215, 247, 61, 225, 68, 188, 143, 100, 192, 38, 107, 227, 142, 214, 175,
9, 3, 118, 46, 37, 3, 211, 199, 199, 28, 218, 105, 238, 169, 154>>,
public_key: <<216, 214, 6, 64, 220, 252, 62, 18, 115, 98, 182, 218, 97, 153, 40, 125, 44, 236,
69, 88, 194, 34, 54, 251, 3, 120, 233, 36, 185, 157, 10, 42>>
}
}}
Using the my_counter
as Example:
$ git clone [email protected]:WeLightProject/Web3-dApp-Camp.git
$ cd Web3-dApp-Camp/move-dapp/my-counter
Modify the address in move.toml
to the address that you would like to deploy your contract.
[package]
name = "my_counter"
version = "0.0.1"
[addresses]
StarcoinFramework = "0x1"
MyAddr = [YOUR ADDR]
[dependencies]
StarcoinFramework = {git = "https://github.com/starcoinorg/starcoin-framework.git", rev="9ea61ce1429070c945002b26ef5f5ea6b72884e4"}
Compile:
$ mpm release
Open Console, the command will start a dev node local yet:
$ starcoin -d /Users/liaohua/starcoin_data -n dev console
Get-coin on local network:
starcoin% dev get-coin -v 100STC
Deploy Contract with starcoin:
starcoin% dev deploy [path to blob] -s [addr] -b
Deploy Contract with Elixir SDK:
💡Remember to get some faucet first:
starcoin% account transfer -r 0x52bfdf8638e3658bb9f00cc04ca98bdd -v 100000000000
Operate in iex
:
client = Web3MoveEx.Starcoin.Client.connect()
payload = Web3MoveEx.Starcoin.Transaction.script_function("0x52bfdf8638e3658bb9f00cc04ca98bdd", "MyCounter", "init_counter", [], [])
module_path = "./test/starcoin/transaction/fixtures/MyCounter.mv""
options = [private_key: "0xdebb41434877520254a4551a80b78dcfdce9bc3d576b13b66c3b343d515c0a8b"]
Web3MoveEx.Starcoin.deploy_contract(client, payload, module_path, options)
Additional Tips:
-
Get Faucet on barnard: https://faucet.starcoin.org/barnard
-
Connect Testnet by Console:
$ starcoin --connect ws://barnard.seed.starcoin.org:9870 --local-account-dir ~/.starcoin/barnard/account_vaults console
Web3MoveEx.Starcoin.Caller.Contract.get_resource(
client,
"<you_addresss>",
"<deploy_address>::MyCounter::Counter"
)
{:ok,
%{
id: 1,
jsonrpc: "2.0",
result: %{
abilities: 12,
type_: "<deploy_address>::MyCounter::Counter",
value: [["value", %{U64: "0"}]]
}
}}
/ / TODO
client = Web3MoveEx.Starcoin.Client.connect()
payload =
Web3MoveEx.Starcoin.Transaction.Function.call(
client,
"<deploy_address>::MyCounter::incr_counter",
[],
[]
)
options = [private_key: "<you_private_key>"]
Web3MoveEx.Starcoin.submit_txn(client, payload, options)
# when get resource return 1