-module(gleeth@commands@send). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/gleeth/commands/send.gleam"). -export([execute/2]). -export_type([send_args/0]). -type send_args() :: {send_args, binary(), binary(), binary(), binary(), binary(), boolean()}. -file("src/gleeth/commands/send.gleam", 156). -spec print_receipt(gleeth@provider:provider(), binary()) -> {ok, nil} | {error, gleeth@rpc@types:gleeth_error()}. print_receipt(Provider, Tx_hash) -> case gleeth@rpc@methods:get_transaction_receipt(Provider, Tx_hash) of {ok, Receipt} -> gleam_stdlib:println(<<""/utf8>>), gleam_stdlib:println(<<"Receipt:"/utf8>>), gleeth@ethereum@formatting:print_labeled_value( <<"Status"/utf8>>, case erlang:element(13, Receipt) of success -> <<"Success"/utf8>>; failed -> <<"Failed"/utf8>> end ), gleeth@ethereum@formatting:print_labeled_value( <<"Block"/utf8>>, erlang:element(5, Receipt) ), gleeth@ethereum@formatting:print_labeled_value( <<"Gas Used"/utf8>>, erlang:element(9, Receipt) ), {ok, nil}; {error, _} -> gleam_stdlib:println(<<""/utf8>>), gleam_stdlib:println( <<"Receipt not yet available. Query with: gleeth transaction "/utf8, Tx_hash/binary>> ), {ok, nil} end. -file("src/gleeth/commands/send.gleam", 182). -spec map_tx_error( {ok, LSM} | {error, gleeth@crypto@transaction:transaction_error()} ) -> {ok, LSM} | {error, gleeth@rpc@types:gleeth_error()}. map_tx_error(Res) -> gleam@result:map_error(Res, fun(Field@0) -> {transaction_err, Field@0} end). -file("src/gleeth/commands/send.gleam", 76). -spec send_legacy( gleeth@provider:provider(), gleeth@crypto@wallet:wallet(), send_args(), binary(), binary(), integer() ) -> {ok, nil} | {error, gleeth@rpc@types:gleeth_error()}. send_legacy(Provider, W, Args, Nonce, Gas_limit, Chain_id) -> gleam@result:'try'( gleeth@rpc@methods:get_gas_price(Provider), fun(Gas_price) -> gleeth@ethereum@formatting:print_labeled_value( <<"Gas Price"/utf8>>, Gas_price ), gleeth@ethereum@formatting:print_labeled_value( <<"Type"/utf8>>, <<"Legacy (Type 0)"/utf8>> ), gleam_stdlib:println(<<""/utf8>>), gleam@result:'try'( begin _pipe = gleeth@crypto@transaction:create_legacy_transaction( erlang:element(2, Args), erlang:element(3, Args), Gas_limit, Gas_price, Nonce, erlang:element(6, Args), Chain_id ), map_tx_error(_pipe) end, fun(Tx) -> gleam@result:'try'( begin _pipe@1 = gleeth@crypto@transaction:sign_transaction( Tx, W ), map_tx_error(_pipe@1) end, fun(Signed) -> gleam@result:'try'( gleeth@rpc@methods:send_raw_transaction( Provider, erlang:element(12, Signed) ), fun(Tx_hash) -> gleam_stdlib:println( <<"Transaction sent!"/utf8>> ), gleeth@ethereum@formatting:print_labeled_value( <<"Hash"/utf8>>, Tx_hash ), print_receipt(Provider, Tx_hash) end ) end ) end ) end ). -file("src/gleeth/commands/send.gleam", 113). -spec send_eip1559( gleeth@provider:provider(), gleeth@crypto@wallet:wallet(), send_args(), binary(), binary(), integer() ) -> {ok, nil} | {error, gleeth@rpc@types:gleeth_error()}. send_eip1559(Provider, W, Args, Nonce, Gas_limit, Chain_id) -> gleam@result:'try'( gleeth@rpc@methods:get_gas_price(Provider), fun(Max_fee) -> gleam@result:'try'( gleeth@rpc@methods:get_max_priority_fee(Provider), fun(Priority_fee) -> gleeth@ethereum@formatting:print_labeled_value( <<"Max Fee"/utf8>>, Max_fee ), gleeth@ethereum@formatting:print_labeled_value( <<"Priority Fee"/utf8>>, Priority_fee ), gleeth@ethereum@formatting:print_labeled_value( <<"Type"/utf8>>, <<"EIP-1559 (Type 2)"/utf8>> ), gleam_stdlib:println(<<""/utf8>>), gleam@result:'try'( begin _pipe = gleeth@crypto@transaction:create_eip1559_transaction( erlang:element(2, Args), erlang:element(3, Args), Gas_limit, Max_fee, Priority_fee, Nonce, erlang:element(6, Args), Chain_id, [] ), map_tx_error(_pipe) end, fun(Tx) -> gleam@result:'try'( begin _pipe@1 = gleeth@crypto@transaction:sign_eip1559_transaction( Tx, W ), map_tx_error(_pipe@1) end, fun(Signed) -> gleam@result:'try'( gleeth@rpc@methods:send_raw_transaction( Provider, erlang:element(14, Signed) ), fun(Tx_hash) -> gleam_stdlib:println( <<"Transaction sent!"/utf8>> ), gleeth@ethereum@formatting:print_labeled_value( <<"Hash"/utf8>>, Tx_hash ), print_receipt(Provider, Tx_hash) end ) end ) end ) end ) end ). -file("src/gleeth/commands/send.gleam", 25). -spec execute(gleeth@provider:provider(), send_args()) -> {ok, nil} | {error, gleeth@rpc@types:gleeth_error()}. execute(Provider, Args) -> gleam@result:'try'( begin _pipe = gleeth@crypto@wallet:from_private_key_hex( erlang:element(4, Args) ), gleam@result:map_error( _pipe, fun(Field@0) -> {wallet_err, Field@0} end ) end, fun(W) -> Sender = gleeth@crypto@wallet:get_address(W), gleam@result:'try'(case gleeth@provider:chain_id(Provider) of {some, Id} -> {ok, {Provider, Id}}; none -> gleam@result:'try'( gleeth@rpc@methods:get_chain_id(Provider), fun(Chain_id_hex) -> gleam@result:'try'( begin _pipe@1 = gleeth@utils@hex:to_int( Chain_id_hex ), gleam@result:map_error( _pipe@1, fun(_) -> {parse_error, <<"Failed to parse chain ID: "/utf8, Chain_id_hex/binary>>} end ) end, fun(Id@1) -> {ok, {gleeth@provider:with_chain_id( Provider, Id@1 ), Id@1}} end ) end ) end, fun(_use0) -> {Provider@1, Chain_id} = _use0, gleam@result:'try'( gleeth@rpc@methods:get_transaction_count( Provider@1, Sender, <<"pending"/utf8>> ), fun(Nonce) -> Gas_limit = case erlang:element(5, Args) of <<""/utf8>> -> <<"0x5208"/utf8>>; Gl -> Gl end, gleam_stdlib:println( <<"Sending transaction..."/utf8>> ), gleeth@ethereum@formatting:print_labeled_value( <<"From"/utf8>>, Sender ), gleeth@ethereum@formatting:print_labeled_value( <<"To"/utf8>>, erlang:element(2, Args) ), gleeth@ethereum@formatting:print_labeled_value( <<"Value"/utf8>>, erlang:element(3, Args) ), gleeth@ethereum@formatting:print_labeled_value( <<"Nonce"/utf8>>, Nonce ), gleeth@ethereum@formatting:print_labeled_value( <<"Chain ID"/utf8>>, erlang:integer_to_binary(Chain_id) ), case erlang:element(7, Args) of true -> send_legacy( Provider@1, W, Args, Nonce, Gas_limit, Chain_id ); false -> send_eip1559( Provider@1, W, Args, Nonce, Gas_limit, Chain_id ) end end ) end) end ).