⌘K

Interacting With Contracts

Icon Link与合约交互

如果您已经部署了一个合约,并想使用 SDK 调用其方法,但不想再次部署它,您只需知道您已部署的合约的合约 ID。您可以跳过整个部署设置过程,直接调用 ::new(contract_id, wallet)。例如:

abigen!(Contract(
    name = "MyContract",
    // Replace with your contract ABI.json path
    abi = "e2e/sway/contracts/contract_test/out/release/contract_test-abi.json"
));
let wallet_original = launch_provider_and_get_wallet().await?;
 
let wallet = wallet_original.clone();
// Your bech32m encoded contract ID.
let contract_id: Bech32ContractId =
    "fuel1vkm285ypjesypw7vhdlhnty3kjxxx4efckdycqh3ttna4xvmxtfs6murwy".parse()?;
 
let connected_contract_instance = MyContract::new(contract_id, wallet);
// You can now use the `connected_contract_instance` just as you did above!

上面的示例假设您的合约 ID 字符串是以 bech32 格式编码的。您可以通过人类可读部分 "fuel" 后跟分隔符 "1" 来识别它。然而,当使用其他 Fuel 工具时,您可能会得到一个十六进制编码的合约 ID 字符串。在这种情况下,您可以按以下方式创建您的合约实例:

let contract_id: ContractId =
    "0x65b6a3d081966040bbccbb7f79ac91b48c635729c59a4c02f15ae7da999b32d3".parse()?;
 
let connected_contract_instance = MyContract::new(contract_id, wallet);

您可以在此了解有关 Fuel SDK bech32 类型的更多信息此处