完成后端配置后,AppKit 就是一个随身携带的 Web3 百宝箱。AppKit.Evm 已经把 Nethereum 与 Wagmi 整合打包装好,帮你自动选路线:WebGL 请求交给 Wagmi,其余平台走 Nethereum。接下来用几个常见场景一次性教会你如何读取链上数据、转账 ETH、玩转 ERC20 代币,以及深度调用 Nethereum 原生方法。
发送 ETH 只需三行代码
当你的 DApp 需要让用户充值、打赏、或支付 gas 时,这段代码即插即用:
const string toAddress = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
BigInteger amount = Web3.Convert.ToWei(0.001); // 转换 0.001 ETH
string txHash = await AppKit.Evm.SendTransactionAsync(toAddress, amount);
Debug.Log($"TX Hash: {txHash}");默认的 gas 为 21,000,gas 价格由钱包自动议定,无需手动操心。
读取链上状态:实时余额,总是准的
var account = await AppKit.GetAccountAsync();
BigInteger balance = await AppKit.Evm.GetBalanceAsync(account.Address);
Debug.Log($"当前余额: {Web3.Convert.FromWei(balance)} ETH");此操作为只读,不占 gas,当然也不需要用户签名。
与智能合约无障碍沟通
查询 ERC20 余额
合约地址、标准 ABI、用户地址三件套配齐即可:
const string contractAddress = "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984";
const string ownerAddress = "0x3D30B1aB88D487B0F3061F40De76845Bec3F1e94";
const string abi = "[...]"; // 完整 ERC20 ABI
var balanceRaw = await AppKit.Evm.ReadContractAsync(contractAddress, abi, "balanceOf", new object[]{ ownerAddress });
var decimals = (await AppKit.Evm.ReadContractAsync(contractAddress, abi, "decimals") as BigInteger).Value;
var realBalance = balanceRaw.Value / BigInteger.Pow(10, decimals);发送 ERC20 代币
加上预估 gas、用户签名,搞定转账:
const string recipientAddress = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
BigInteger amount = 1; // 实际数量(如 1 USDT)
var arguments = new object[] { recipientAddress, amount };
var gasAmount = await AppKit.Evm.EstimateGasAsync(contractAddress, abi, "transfer", arguments);
var txHash = await AppKit.Evm.WriteContractAsync(contractAddress, abi, "transfer", gasAmount, arguments);深度 Nethereum:原生威力 One-Line 解锁
在移动端或桌面平台,如果你需要做复杂操作,可直接拿到一个已配置好的 Web3 实例:
var web3 = (AppKit.Evm as NethereumEvmService).Web3;⚠️ 不要缓存这个 Web3,因为链切换时配置会自动更新。
看到这里,你可能已经想立刻跑一个小 demo。👉 这里有一份从创建账户到发送代币的完整实战录屏,点开就能跟着敲代码 >>
常见问题(FAQ)
Q1:AppKit 是否必须配合 MetaMask?
A:不强制。只要是 WalletConnect 协议的钱包都能连,TokenPocket、OKX Wallet 等均可。
Q2:Unity WebGL 会不会损失性能?
A:通过 Wagmi 与钱包交互走的是浏览器 API,几乎不占 Unity 渲染线程,实测 60 FPS 无压力。
Q3:如何动态切换链?
A:await AppKit.Network.SwitchChainAsync(chainId); 一行即可,AppKit 会自动 reload Web3。
Q4:revert error 看不到原因?
A:在 WriteContractAsync 捕获 RpcResponseException,其 ErrorMessage 会返回合约 revert 的具体字符串。
Q5:ABI 太长怎么办?
A:推荐把 ABI 拆成 .json 流文件,打包后放在 StreamingAssets,运行时 File.ReadAllText 动态加载即可。
小结
- AppKit.Evm 封装了常见转账、读状态、读写合约,API 简单好懂。
- 想深挖高级功能,可以直接掏出 Nethereum 的 Web3 实例,零配置即可用。
- 所有示例代码均可直接移动到 Unity 中运行,覆盖 WebGL、iOS、Android 乃至桌面端。
再遇到 “链上数据总对不上” 或 “签名弹窗不出来” 的烦恼?👉 点这里看完整避坑列表,一文扫清常见疑难杂症!