defmodule Web3AptosEx.ModuleHandler.Aptos.MoveDID do @moduledoc """ 0x61b96051f553d767d7e6dfcc04b04c28d793c8af3d07d3a43b4e2f8f4ca04c9f::move_did """ import Web3AptosEx.Aptos alias Web3AptosEx.Aptos @basic_path "0x61b96051f553d767d7e6dfcc04b04c28d793c8af3d07d3a43b4e2f8f4ca04c9f" @resource %{ addr_aggregator: "#{@basic_path}::addr_aggregator::AddrAggregator", addr_info: "#{@basic_path}::addr_info::AddrInfo", service_aggregator: "#{@basic_path}::service_aggregator::ServiceAggregator", service: "#{@basic_path}::service_aggregator::Service", } # +--------+ # | Events | # +--------+ def get_all(client, addr) do addrs = get_addr_aggregator(client, addr) services = get_service_aggregator(client, addr) %{addr_aggregator: addrs, service_aggregator: services} end def get_addr_aggregator(client, addr) do {:ok, %{data: result}} = Aptos.get_resource(client, addr, @resource.addr_aggregator) addr_details = Enum.map(result.addrs, fn item -> {:ok, detail} = Aptos.get_table_item( client, result.addr_infos_map.handle, "0x1::string::String", @resource.addr_info, item) detail end) Map.put(result, :addr_details, addr_details) end def get_service_aggregator(client, addr) do {:ok, %{data: result}} = Aptos.get_resource(client, addr, @resource.service_aggregator) service_details = Enum.map(result.names, fn item -> {:ok, detail} = Aptos.get_table_item( client, result.services_map.handle, "0x1::string::String", @resource.service, item) detail end) Map.put(result, :service_details, service_details) end # +-------+ # | Funcs | # +-------+ @doc """ const ADDR_AGGREGATOR_TYPE_HUMAN: u64 = 0; const ADDR_AGGREGATOR_TYPE_ORG: u64 = 1; const ADDR_AGGREGATOR_TYPE_ROBOT: u64 = 2; """ def init(client, acct, type, description, options \\ []) do {:ok, f} = ~a"#{@basic_path}::init::init(u64, string)" payload = Aptos.call_function(f, [], [type, description]) Aptos.submit_txn_with_auto_acct_updating(client, acct, payload, options) end @doc """ public entry fun add_addr( acct: &signer, addr_type: u64, addr: String, pubkey: String, chains: vector, description: String, spec_fields: String, expired_at: u64 ) acquires AddrAggregator { let send_addr = signer::address_of(acct); let addr_aggr = borrow_global_mut(send_addr); do_add_addr(addr_aggr, send_addr, addr_type, addr, pubkey, chains, description, spec_fields, expired_at); } const ADDR_TYPE_ETH: u64 = 0; const ADDR_TYPE_APTOS: u64 = 1; """ def add_addr( client, acct, addr_type, addr, pubkey, chains, description, spec_fields, expired_at, options \\ [] ) do {:ok, f} = ~a"#{@basic_path}::addr_aggregator::add_addr(u64, string, string, vector, string, string, u64)" payload = Aptos.call_function(f, [], [ addr_type, addr, pubkey, chains, description, spec_fields, expired_at ]) Aptos.submit_txn_with_auto_acct_updating(client, acct, payload, options) end end