From 3f2f4e2f3c841cb08941359dd18d799bb8f310d5 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Tue, 14 Feb 2023 11:35:36 +0100 Subject: [PATCH] test: meta transaction FT transfer (#8564) This is the example used for NEP-366, an FT transfer paid by the relayer but the relayer gets a reward in FT. Adds `fungible_token.wasm` as a test contract, which is the example implementation of NEP-141 in the near-sdk-rs repository. We deploy this WASM, initialize the state to make an FT transfer possible and then execute a meta transaction as intended. This makes gas checks in meta transaction tests even more annoying but otherwise the existing test framework mostly just worked. --- core/primitives/src/test_utils.rs | 2 +- .../tests/client/features/delegate_action.rs | 187 +++++++++++++++++- .../res/fungible_token.wasm | Bin 0 -> 176789 bytes runtime/near-test-contracts/src/lib.rs | 15 ++ test-utils/testlib/src/runtime_utils.rs | 26 +-- 5 files changed, 212 insertions(+), 18 deletions(-) create mode 100755 runtime/near-test-contracts/res/fungible_token.wasm diff --git a/core/primitives/src/test_utils.rs b/core/primitives/src/test_utils.rs index 71913cc9eff..b9296f7dc44 100644 --- a/core/primitives/src/test_utils.rs +++ b/core/primitives/src/test_utils.rs @@ -500,7 +500,7 @@ impl FinalExecutionOutcomeView { #[track_caller] /// Check transaction and all transitive receipts for success status. pub fn assert_success(&self) { - assert_eq!(self.status, FinalExecutionStatus::SuccessValue(Vec::new())); + assert!(matches!(self.status, FinalExecutionStatus::SuccessValue(_))); for (i, receipt) in self.receipts_outcome.iter().enumerate() { assert!( matches!( diff --git a/integration-tests/src/tests/client/features/delegate_action.rs b/integration-tests/src/tests/client/features/delegate_action.rs index 01c27b9c271..20d8861519c 100644 --- a/integration-tests/src/tests/client/features/delegate_action.rs +++ b/integration-tests/src/tests/client/features/delegate_action.rs @@ -11,6 +11,7 @@ use near_chain_configs::Genesis; use near_client::test_utils::TestEnv; use near_crypto::{KeyType, PublicKey}; use near_primitives::account::AccessKey; +use near_primitives::config::ActionCosts; use near_primitives::errors::{ActionsValidationError, InvalidTxError, TxExecutionError}; use near_primitives::test_utils::create_user_test_signer; use near_primitives::transaction::{ @@ -25,7 +26,9 @@ use near_primitives::views::{ use near_test_contracts::smallest_rs_contract; use nearcore::config::GenesisExt; use nearcore::NEAR_BASE; -use testlib::runtime_utils::{alice_account, bob_account, carol_account, eve_dot_alice_account}; +use testlib::runtime_utils::{ + add_contract, alice_account, bob_account, carol_account, eve_dot_alice_account, +}; fn exec_meta_transaction( actions: Vec, @@ -187,6 +190,8 @@ fn check_meta_tx_no_fn_call( /// Call `check_meta_tx_execution` and perform gas checks specific to function calls. /// /// This is a common checker function used by the tests below. +/// It works for action lists that consists multiple function calls but adding +/// other action will mess up the gas checks. fn check_meta_tx_fn_call( node: &impl Node, actions: Vec, @@ -197,8 +202,8 @@ fn check_meta_tx_fn_call( receiver: AccountId, ) -> FinalExecutionOutcomeView { let fee_helper = fee_helper(node); - let gas_cost = - fee_helper.function_call_cost(msg_len, 0) + fee_helper.meta_tx_overhead_cost(&actions); + let num_fn_calls = actions.len(); + let meta_tx_overhead_cost = fee_helper.meta_tx_overhead_cost(&actions); let (tx_result, sender_diff, relayer_diff, receiver_diff) = check_meta_tx_execution(node, actions, sender, relayer, receiver); @@ -209,14 +214,30 @@ fn check_meta_tx_fn_call( // costs and contract reward. We need to check in the function call receipt // how much gas was spent and subtract the base cost that is not part of the // dynamic cost. The contract reward can be inferred from that. - let gas_burnt_for_function_call = tx_result.receipts_outcome[1].outcome.gas_burnt - - fee_helper.function_call_exec_gas(msg_len); + + // static send gas is paid and burnt upfront + let static_send_gas = fee_helper.cfg.fee(ActionCosts::new_action_receipt).send_fee(false) + + num_fn_calls as u64 * fee_helper.cfg.fee(ActionCosts::function_call_base).send_fee(false) + + msg_len * fee_helper.cfg.fee(ActionCosts::function_call_byte).send_fee(false); + // static execution gas burnt in the same receipt as the function calls but + // it doesn't contribute to the contract reward + let static_exec_gas = fee_helper.cfg.fee(ActionCosts::new_action_receipt).exec_fee() + + num_fn_calls as u64 * fee_helper.cfg.fee(ActionCosts::function_call_base).exec_fee() + + msg_len * fee_helper.cfg.fee(ActionCosts::function_call_byte).exec_fee(); + + // calculate contract rewards as reward("gas burnt in fn call receipt" - "static exec costs") + let gas_burnt_for_function_call = + tx_result.receipts_outcome[1].outcome.gas_burnt - static_send_gas; let dyn_cost = fee_helper.gas_to_balance(gas_burnt_for_function_call); let contract_reward = fee_helper.gas_burnt_to_reward(gas_burnt_for_function_call); + // the relayer pays all gas and tokens + let gas_cost = + meta_tx_overhead_cost + fee_helper.gas_to_balance(static_exec_gas + static_send_gas); let expected_relayer_cost = (gas_cost + tokens_transferred + dyn_cost) as i128; assert_eq!(relayer_diff, -expected_relayer_cost, "unexpected relayer balance"); + // the receiver gains transferred tokens and the contract reward let expected_receiver_gain = (tokens_transferred + contract_reward) as i128; assert_eq!(receiver_diff, expected_receiver_gain, "unexpected receiver balance"); @@ -395,3 +416,159 @@ fn meta_tx_delete_account() { let err = node.view_account(&receiver).expect_err("account should have been deleted"); assert_eq!(err, "Account ID #eve.alice.near does not exist"); } + +/// Test the canonical example for meta transactions: A fungible token transfer. +/// +/// Scenario: Bob sends some Carol-FT to David without requiring any NEAR tokens +/// to purchase gas. Alice acts as a relayer. +#[test] +fn meta_tx_ft_transfer() { + let relayer = alice_account(); + let sender = bob_account(); + let ft_contract = carol_account(); + let receiver = "david.near"; + + let mut genesis = Genesis::test(vec![alice_account(), bob_account(), carol_account()], 3); + add_contract(&mut genesis, &ft_contract, near_test_contracts::ft_contract().to_vec()); + let node = RuntimeNode::new_from_genesis(&relayer, genesis); + + // A BUNCH OF TEST SETUP + // initialize the contract + node.user() + .function_call( + relayer.clone(), + ft_contract.clone(), + "new_default_meta", + // make the relayer (alice) owner, makes initialization easier + br#"{"owner_id": "alice.near", "total_supply": "1000000"}"#.to_vec(), + 30_000_000_000_000, + 0, + ) + .expect("FT contract initialization failed") + .assert_success(); + + // register sender & receiver FT accounts + let actions = vec![ft_register_action(&sender), ft_register_action(&receiver)]; + node.user() + .sign_and_commit_actions(relayer.clone(), ft_contract.clone(), actions) + .expect("registering FT accounts") + .assert_success(); + // initialize sender balance + let actions = vec![ft_transfer_action(&sender, 10_000).0]; + node.user() + .sign_and_commit_actions(relayer.clone(), ft_contract.clone(), actions) + .expect("initializing sender balance failed") + .assert_success(); + + // START OF META TRANSACTION + // 1% fee to the relayer + let (action0, bytes0) = ft_transfer_action(&relayer, 10); + // the actual transfer + let (action1, bytes1) = ft_transfer_action(receiver, 1000); + let actions = vec![action0, action1]; + + let outcome = check_meta_tx_fn_call( + &node, + actions, + bytes0 + bytes1, + 2, + sender.clone(), + relayer.clone(), + ft_contract.clone(), + ); + + // Check that the function call was executed as expected, according to NEP-141 events. + let fn_call_logs = &outcome.receipts_outcome[1].outcome.logs; + + assert_eq!(2, fn_call_logs.len(), "expected 2 JSON events but found {fn_call_logs:?}"); + assert_eq!( + fn_call_logs[0], + ft_transfer_event(&sender, &relayer, 10), + "relayer event looks wrong" + ); + assert_eq!( + fn_call_logs[1], + ft_transfer_event(&sender, &receiver, 1000), + "receiver event looks wrong" + ); + + // Also check FT balances + assert_ft_balance(&node, &ft_contract, &receiver, 1000); + assert_ft_balance(&node, &ft_contract, &sender, 10_000 - 1000 - 10); + assert_ft_balance(&node, &ft_contract, &relayer, 1_000_000 - 10_000 + 10); +} + +/// Construct an function call action with a FT transfer. +/// +/// Returns the action and the number of bytes for gas charges. +fn ft_transfer_action(receiver: &str, amount: u128) -> (Action, u64) { + let args: Vec = format!( + r#"{{ + "receiver_id": "{receiver}", + "amount": "{amount}" + }}"# + ) + .bytes() + .collect(); + let method_name = "ft_transfer".to_owned(); + let num_bytes = method_name.len() + args.len(); + let action = Action::FunctionCall(FunctionCallAction { + method_name, + args, + gas: 20_000_000_000_000, + deposit: 1, + }); + + (action, num_bytes as u64) +} + +/// Add NEAR token balance to maintain the storage of an account, which +/// registers the user in the fungible contract account. +fn ft_register_action(receiver: &str) -> Action { + let args: Vec = format!( + r#"{{ + "account_id": "{receiver}" + }}"# + ) + .bytes() + .collect(); + Action::FunctionCall(FunctionCallAction { + method_name: "storage_deposit".to_owned(), + args, + gas: 20_000_000_000_000, + deposit: NEAR_BASE, + }) +} + +/// Format a NEP-141 event for an ft transfer +fn ft_transfer_event(sender: &str, receiver: &str, amount: u128) -> String { + // This part is valid JSON, I would like to use the json!() macro but it + // produces the fields out of order. This is valid for JSON but it will fail + // the string comparison. + // (Note: parsing the logs as JSON and comparing serde_json::Value instead + // of string is not possible because the logs are only partially valid + // JOSN...) + let data_json = format!( + r#"[{{"old_owner_id":"{sender}","new_owner_id":"{receiver}","amount":"{amount}"}}]"# + ); + let json = format!( + r#"{{"standard":"nep141","version":"1.0.0","event":"ft_transfer","data":{data_json}}}"# + ); + // this part isn't even valid JSON + format!("EVENT_JSON:{json}") +} + +/// Asserts an FT balance for an account. +fn assert_ft_balance( + node: &RuntimeNode, + ft_contract: &AccountId, + user: &str, + expected_balance: Balance, +) { + let response = node + .user() + .view_call(ft_contract, "ft_balance_of", format!(r#"{{"account_id":"{user}"}}"#).as_bytes()) + .expect("view call failed"); + let balance = std::str::from_utf8(&response.result).expect("invalid UTF8"); + assert_eq!(format!("\"{expected_balance}\""), balance); +} diff --git a/runtime/near-test-contracts/res/fungible_token.wasm b/runtime/near-test-contracts/res/fungible_token.wasm new file mode 100755 index 0000000000000000000000000000000000000000..3ab410d723c8029e70993b0829a17ddd52d8b135 GIT binary patch literal 176789 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 F{|_-ra7q9G literal 0 HcmV?d00001 diff --git a/runtime/near-test-contracts/src/lib.rs b/runtime/near-test-contracts/src/lib.rs index f4d54a07f25..186e374841a 100644 --- a/runtime/near-test-contracts/src/lib.rs +++ b/runtime/near-test-contracts/src/lib.rs @@ -79,6 +79,20 @@ pub fn fuzzing_contract() -> &'static [u8] { CONTRACT.get_or_init(|| read_contract("contract_for_fuzzing_rs.wasm")).as_slice() } +/// NEP-141 implementation (fungible token contract). +/// +/// The code is available here: +/// https://github.com/near/near-sdk-rs/tree/master/examples/fungible-token +/// +/// We keep a static WASM of this for our integration tests. We don't have to +/// update it with every SDK release, any contract implementing the interface +/// defined by NEP-141 is sufficient. But for future reference, the WASM was +/// compiled with SDK version 4.1.1. +pub fn ft_contract() -> &'static [u8] { + static CONTRACT: OnceCell> = OnceCell::new(); + CONTRACT.get_or_init(|| read_contract("fungible_token.wasm")).as_slice() +} + /// Smallest (reasonable) contract possible to build. /// /// This contract is guaranteed to have a "sum" function @@ -133,6 +147,7 @@ fn smoke_test() { assert!(!trivial_contract().is_empty()); assert!(!fuzzing_contract().is_empty()); assert!(!base_rs_contract().is_empty()); + assert!(!ft_contract().is_empty()); } pub struct LargeContract { diff --git a/test-utils/testlib/src/runtime_utils.rs b/test-utils/testlib/src/runtime_utils.rs index 9ee9086e853..0ea03f5a7c5 100644 --- a/test-utils/testlib/src/runtime_utils.rs +++ b/test-utils/testlib/src/runtime_utils.rs @@ -1,8 +1,6 @@ -use once_cell::sync::Lazy; - use near_chain_configs::Genesis; use near_primitives::account::Account; -use near_primitives::hash::{hash, CryptoHash}; +use near_primitives::hash::hash; use near_primitives::state_record::StateRecord; use near_primitives::types::AccountId; @@ -23,28 +21,32 @@ pub fn x_dot_y_dot_alice_account() -> AccountId { "x.y.alice.near".parse().unwrap() } -static DEFAULT_TEST_CONTRACT_HASH: Lazy = - Lazy::new(|| hash(near_test_contracts::rs_contract())); - +/// Pre-deploy in genesis the standard test contract for a given account. +/// +/// This contract contains various functions useful for testing and its code is available in +/// `/home/jakmeier/near/core-runtime/nearcore/runtime/near-test-contracts/test-contract-rs/src/lib.rs` pub fn add_test_contract(genesis: &mut Genesis, account_id: &AccountId) { + add_contract(genesis, account_id, near_test_contracts::rs_contract().to_vec()) +} + +/// Pre-deploy in genesis any contract for a given account. +pub fn add_contract(genesis: &mut Genesis, account_id: &AccountId, code: Vec) { let mut is_account_record_found = false; + let hash = hash(&code); let records = genesis.force_read_records().as_mut(); for record in records.iter_mut() { if let StateRecord::Account { account_id: record_account_id, ref mut account } = record { if record_account_id == account_id { is_account_record_found = true; - account.set_code_hash(*DEFAULT_TEST_CONTRACT_HASH); + account.set_code_hash(hash); } } } if !is_account_record_found { records.push(StateRecord::Account { account_id: account_id.clone(), - account: Account::new(0, 0, *DEFAULT_TEST_CONTRACT_HASH, 0), + account: Account::new(0, 0, hash, 0), }); } - records.push(StateRecord::Contract { - account_id: account_id.clone(), - code: near_test_contracts::rs_contract().to_vec(), - }); + records.push(StateRecord::Contract { account_id: account_id.clone(), code }); }