衍生钱包 Sui
轻量级加载包 @aptos-labs/wallet-adapter-反应 使功能能够使用 Sui 钱包作为原生 Aptos 钱包
Sui钱包如何与钱包适配器一起工作?
当用户使用被支持的Sui钱包连接到dApp时,适配器会计算用户的可衍生摘要账户(DAA)地址并转换Sui账户,以遵循Aptos钱包标准接口. 这确保了开发者和终端用户与钱包的无缝互动.
DAA 地址的计算使用 authenticationFunction 编辑 accountIdentity,两者在本包中定义:
authenticationFunction:这是存在于链上并用于验证Sui账户签名的函数. 该函数存在于0x1::sui_derivable_account::authenticateaccountIdentity:这代表了用于验证Sui账户签名的链上认证功能中使用的账户的身份. Sui DAA账户身份格式为:${originWalletPublicKey}${domain}
如何在我的DApp中整合一个苏伊钱包?
钱包适配器跟随 苏伊钱包标准 以发现钱包. 目前,已测试和支持跨链账户的钱包有:
| 阿普托斯·德文内 | Aptos 测试网 | 阿普托斯主网 | |
|---|---|---|---|
| 后包装 | ✅ | ✅ | |
| 夜来 | ✅ | ✅ | |
| OKX 单曲 | ✅ | ✅ | |
| 幽灵 | ✅ | ✅ | |
| 倒浆 | ✅ | ✅ |
使用量
自动钱包检测
在用户连接其Sui钱包的dApp构建时使用这种方法.
- 安装软件包
npm install @aptos-labs/wallet-adapter-react @aptos-labs/derived-wallet-sui
- 设置自动检测
import { AptosWalletAdapterProvider, Network } from "@aptos-labs/wallet-adapter-react";
import { setupAutomaticSuiWalletDerivation } from "@aptos-labs/derived-wallet-sui";
setupAutomaticSuiWalletDerivation({ defaultNetwork: Network.TESTNET });
// ...
<AptosWalletAdapterProvider
dappConfig={{
network: Network.TESTNET,
}}
>
{children}
</AptosWalletAdapterProvider>
提交交易(与收费人)
在大多数情况下,允许用户向Aptos连锁公司提交有Sui账户的交易需要使用赞助商交易. 这是因为苏伊账户可能没有APT支付汽油. 因此,DApp应考虑维持一个赞助人账户来赞助交易.
import React from "react";
import { useWallet } from "@aptos-labs/wallet-adapter-react";
import {
Aptos,
AptosConfig,
Network,
Ed25519PrivateKey,
PrivateKey,
PrivateKeyVariants,
Account,
} from "@aptos-labs/ts-sdk";
// Initialize an Aptos client
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
// Generate a sponsor account or use an existing account
const privateKey = new Ed25519PrivateKey(
PrivateKey.formatPrivateKey("0x123", PrivateKeyVariants.Ed25519),
);
const sponsor = Account.fromPrivateKey({ privateKey });
const SignAndSubmit = () => {
const { account, signTransaction } = useWallet();
const onSignAndSubmitTransaction = async () => {
if (!account) {
throw new Error(
"Account is not connected and unable to sign transaction",
);
}
try {
// Build the transaction
const rawTransaction = await aptos.transaction.build.simple({
data: {
function: "0x1::aptos_account::transfer",
functionArguments: [account.address.toString(), 1],
},
sender: account.address,
withFeePayer: true,
});
// Send it to the wallet to sign
const walletSignedTransaction = await signTransaction({
transactionOrPayload: rawTransaction,
});
// Sponsor account signs the transaction to pay for the gas fees
const sponsorAuthenticator = aptos.transaction.signAsFeePayer({
signer: sponsor,
transaction: rawTransaction,
});
// Submit the transaction to chain
const txnSubmitted = await aptos.transaction.submit.simple({
transaction: rawTransaction,
senderAuthenticator: walletSignedTransaction.authenticator,
feePayerAuthenticator: sponsorAuthenticator,
});
// if you want to wait for transaction
await aptos.waitForTransaction({ transactionHash: txnSubmitted.hash });
} catch (error) {
console.error(error);
}
};
return (
<button onClick={onSignAndSubmitTransaction}>
Sign and submit transaction
</button>
);
};
export default SignAndSubmit;
考虑因素
- 由于来源钱包最有可能没有与Aptos集成,所以在钱包中无法使用模拟.
- 软件包保留了原产地钱包,因此开发人员应该能够通过:
import { useWallet } from "@aptos-labs/wallet-adapter-react";
const { isSuiDerivedWallet } = useWallet();
if (isSuiDerivedWallet(wallet)) {
const publicKey = wallet.suiWallet.accounts[0]?.publicKey;
}
资源
- X-Chain 账户调整器 Demo App
- AIP-113 衍生账户摘要