class Eth::Client
def transact(contract, function_name, *args, **kwargs)
-
(Object)
- returns the result of the call.
Parameters:
-
address
(String
) -- contract address. -
legacy
(Boolean
) -- enables legacy transactions (pre-EIP-1559). -
sender_key
(Eth::Key
) -- the sender private key. -
value
(Integer|String
) -- function arguments. -
function_name
(String
) -- method name to be called. -
contract
(Eth::Contract
) -- subject contract to call. -
value
(Integer|String
) -- function arguments. -
function_name
(String
) -- method name to be called. -
contract
(Eth::Contract
) -- subject contract to call. -
function_name
(String
) -- method name to be called. -
contract
(Eth::Contract
) -- subject contract to call.
Overloads:
-
transact(contract, function_name, value, sender_key, legacy, address)
-
transact(contract, function_name, value)
-
transact(contract, function_name)
def transact(contract, function_name, *args, **kwargs) gas_limit = Tx.estimate_intrinsic_gas(contract.bin) + Tx::CREATE_GAS fun = contract.functions.select { |func| func.name == function_name }[0] params = { value: 0, gas_limit: gas_limit, chain_id: chain_id, to: kwargs[:address] || contract.address, data: call_payload(fun, args), } if kwargs[:legacy] params.merge!({ gas_price: max_fee_per_gas, }) else params.merge!({ priority_fee: max_priority_fee_per_gas, max_gas_fee: max_fee_per_gas, }) end unless kwargs[:sender_key].nil? # use the provided key as sender and signer params.merge!({ from: kwargs[:sender_key].address, nonce: get_nonce(kwargs[:sender_key].address), }) tx = Eth::Tx.new(params) tx.sign kwargs[:sender_key] return eth_send_raw_transaction(tx.hex)["result"] else # use the default account as sender and external signer params.merge!({ from: default_account, nonce: get_nonce(default_account), }) return eth_send_transaction(params)["result"] end end