use fuels::{
accounts::{
signers::private_key::PrivateKeySigner,
wallet::{
Unlocked,
Wallet,
},
},
macros::abigen,
programs::contract::Contract,
tx::StorageSlot,
types::{
ContractId,
Salt,
transaction::TxPolicies,
},
};
abigen!(Contract(
name = "Src20Mock",
abi = "artifacts/test_artifacts/src20-mock-abi.json"
));
pub const SRC20_MOCK_BYTECODE: &[u8] =
include_bytes!("../artifacts/test_artifacts/src20-mock.bin");
pub const SRC20_MOCK_STORAGE_SLOTS: &str =
include_str!("../artifacts/test_artifacts/src20-mock-storage_slots.json");
pub async fn setup_src20_mock(
wallet: &Wallet<Unlocked<PrivateKeySigner>>,
) -> (Src20Mock<Wallet<Unlocked<PrivateKeySigner>>>, ContractId) {
let storage_slots: Vec<StorageSlot> = serde_json::from_str(SRC20_MOCK_STORAGE_SLOTS)
.expect("failed to parse storage slots");
let id =
Contract::regular(SRC20_MOCK_BYTECODE.to_vec(), Salt::default(), storage_slots)
.deploy(wallet, TxPolicies::default())
.await
.unwrap()
.contract_id;
let instance = Src20Mock::new(id, wallet.clone());
(instance, id)
}