Skip to Content
👋 嘿,欢迎使用uCNY电子现金! 了解详情
开发文档rootwallet-api.js其他方法

Xahau 特定方法

setHook (实验性)

通过扩展为账户设置 Hooks。

请求

必填 - 该函数接受一个类型为 SetHookRequest 的输入参数。

  • hooks: 要设置到账户的 Hooks 列表。
interface SetHookRequest extends BaseTransactionRequest { // Hooks 数组,与账户上安装的 Hook Chain 对应。数组中的位置 0 对应 Hook Chain 中的位置 0,依此类推。 hooks: Hook[]; }
interface Hook { Hook: { CreateCode: string; Flags: number; HookApiVersion: number; // 这个 256 位无符号整数的每一位表示 Hook 是否应在特定交易类型上执行。 // // 更多信息:https://xrpl-hooks.readme.io/docs/hookon-field HookOn: string; // 为了避免安装在同一个账户上的两个或多个 Hook 无意中相互覆盖 Hook 状态,在创建或安装每个 Hook 时必须提供一个 32 字节的命名空间。 // // 命名空间可以是开发者选择的任意 32 字节值。只要命名空间在 Hook Chain 中是唯一的,就不会发生状态覆盖。 // // 更多信息:https://xrpl-hooks.readme.io/docs/namespaces HookNamespace: string; // Hook 开发者可以选择在 Hook 中使用安装时参数(称为 Hook 参数)。这允许后续的 Hook 安装者在无需重新编译或重新上传 Hook 的情况下更改某些行为(假设至少有一个账户仍然引用现有的 Hook 定义)。 // // Hook 参数是在 SetHook 交易期间设置的一组键值对,Hook 在运行时可以检索这些参数。参数名称(键)和参数值都设置为十六进制数据,最大长度分别为 32 字节和 256 字节。 // // 一个 SetHook 交易可以为每个安装的 Hook 定义最多 16 个 Hook 参数。 // // 更多信息:https://xrpl-hooks.readme.io/docs/parameters HookParameters?: HookParameter[]; // 授权允许外部 XRPL 账户或 Hook 修改特定 Hook 的命名空间内的 Hook 状态。 // // 如果你想在保留多个先前设置的 HookGrant 条目的同时更新某个特定的 HookGrant,你必须首先获取旧的 HookGrants 数组,对其进行修改,然后在更新操作中重新提交整个数组。要删除所有授权,请提交一个空的 HookGrants 数组。 // // 更多信息:https://xrpl-hooks.readme.io/docs/grants HookGrants?: HookGrant[]; }; }
interface HookParameter { HookParameter: { HookParameterName: string; HookParameterValue: string; }; }
// 警告!!! // // 大多数 Hook 开发者很少需要使用 HookGrants,并且在授予外部 Hook 和账户状态修改权限时应格外小心。 // // 虽然 HookGrant 不能直接用于窃取资金,但外部对 Hook 状态的有意修改可能会导致 Hook 行为异常,在某些情况下可能会导致资金被盗。 // // 如果你认为需要使用 Grant,请首先重新检查你的设计,确保你确实需要使用它。 // // 更多信息:https://xrpl-hooks.readme.io/docs/grants interface HookGrant { HookGrant: { HookHash: string; Authorize?: string; }; }

注意:

  • 如果交易字段 Account 未设置,将使用用户钱包的账户。
响应

响应是一个 Promise,解析为一个包含 typeresult 属性的对象。

  • type: "response" | "reject"
  • result:
    • hash: 交易的哈希。
type: "response"; result: { hash: string; }

type: "reject"; result: undefined;
错误处理

如果发生错误,将抛出错误。

示例
import { setHook } from "@xhbmygod/rootwallet-api"; const payload = { hooks: [ { Hook: { CreateCode: '0061736M01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22', Flags: 1, HookApiVersion: 0, HookOn: 'F'.repeat(58) + 'BFFFFE', HookNamespace: '3963ADEB1B0E8934C0963680531202FD511FF1E16D5864402C2DA63861C420A8', HookParameters: [ { HookParameter: { HookParameterName: 'ABCDEF12', HookParameterValue: '12345678' } } ], HookGrants: [ { HookGrant: { HookHash: '78CAF69EEE950A6C55A450AC2A980DE434D624CD1B13148E007E28B7B6461CC8' } } ] } } ] }; setHook(payload) .then((response) => { console.log("Transaction Hash: ", response.result?.hash); }) .catch((error) => { console.error("Transaction submission failed", error); });

以下是一个 React 网页应用的示例:

import { setHook, isInstalled } from "@xhbmygod/rootwallet-api"; function App() { const handleSetHook = () => { isInstalled().then((response) => { if (response.result.isInstalled) { const payload = { hooks: [ { Hook: { CreateCode: '0061736M01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22', Flags: 1, HookApiVersion: 0, HookOn: 'F'.repeat(58) + 'BFFFFE', HookNamespace: '3963ADEB1B0E8934C0963680531202FD511FF1E16D5864402C2DA63861C420A8', HookParameters: [ { HookParameter: { HookParameterName: 'ABCDEF12', HookParameterValue: '12345678' } } ], HookGrants: [ { HookGrant: { HookHash: '78CAF69EEE950A6C55A450AC2A980DE434D624CD1B13148E007E28B7B6461CC8' } } ] } } ] }; setHook(payload) .then((response) => { console.log("Transaction hash: ", response.result?.hash); }) .catch((error) => { console.error("Transaction submission failed", error); }); } }); }; return ( <div className="App"> <button onClick={handleSetHook}>Set Hooks</button> </div> ); } export default App;

其他

BaseTransactionRequest

所有扩展 BaseTransactionRequest 接口的 Request 接口还包括以下字段:

  • fee: 以滴(drops)为单位的 CNY 数量,作为将此交易分发到网络的成本。
    • 某些交易类型有不同的最低要求。
    • 更多关于滴的技术细节请参考 这里
  • sequence: 发送交易的账户的序列号。
    • 只有当序列号比同一账户的上一个交易大 1 时,交易才有效。
    • 特殊情况 0 表示交易使用 Ticket 代替。
  • accountTxnID: 标识另一个交易的哈希值。
    • 如果提供,只有当发送账户之前发送的交易与提供的哈希匹配时,此交易才有效。
  • lastLedgerSequence: 此交易可以出现的最高账本索引。
    • 指定此字段会严格限制交易等待验证或拒绝的时间。
  • memos: 用于标识此交易的附加任意信息。
    • 每个 memo 的每个属性必须为十六进制编码。
    • 更多关于 memo 的技术细节请参考 这里
  • networkID: 此交易所针对的链的网络 ID。
    • 对于 XRPL 主网和某些测试网络,必须省略。
    • 对于网络 ID 为 1025 或更高的链,必须提供。
  • signers: 表示授权此交易的多重签名的对象数组。
    • 更多关于 signers 的技术细节请参考 这里
  • sourceTag: 用于标识此支付原因的任意整数,或代表此交易发送者的标识。
    • 按照惯例,退款应指定初始支付的 SourceTag 作为退款支付的 DestinationTag。
  • signingPubKey: 用于签名此交易的私钥对应的公钥的十六进制表示。
    • 如果为空字符串,表示 Signers 字段中存在多重签名。
  • ticketSequence: 用于代替序列号的 Ticket 的序列号。
    • 如果提供此字段,Sequence 必须为 0。
    • 不能与 AccountTxnID 一起使用。
  • txnSignature: 验证此交易来自其声称的账户的签名。
interface BaseTransactionRequest { // 以滴(drops)为单位的 CNY 数量,作为将此交易分发到网络的成本。 // 某些交易类型有不同的最低要求。 fee?: string; // 发送交易的账户的序列号。只有当序列号比同一账户的上一个交易大 1 时,交易才有效。 // 特殊情况 0 表示交易使用 Ticket 代替。 sequence?: number; // 标识另一个交易的哈希值。如果提供,只有当发送账户之前发送的交易与提供的哈希匹配时,此交易才有效。 accountTxnID?: string; // 此交易可以出现的最高账本索引。指定此字段会严格限制交易等待验证或拒绝的时间。 lastLedgerSequence?: number; // 用于标识此交易的附加任意信息。 // 每个 memo 的每个属性必须为十六进制编码。 memos?: Memo[]; // 此交易所针对的链的网络 ID。对于 XRPL 主网和某些测试网络,必须省略。 // 对于网络 ID 为 1025 或更高的链,必须提供。 networkID?: number; // 表示授权此交易的多重签名的对象数组。 signers?: Signer[]; // 用于标识此支付原因的任意整数,或代表此交易发送者的标识。 // 按照惯例,退款应指定初始支付的 SourceTag 作为退款支付的 DestinationTag。 sourceTag?: number; // 用于签名此交易的私钥对应的公钥的十六进制表示。 // 如果为空字符串,表示 Signers 字段中存在多重签名。 signingPubKey?: string; // 用于代替序列号的 Ticket 的序列号。如果提供此字段,Sequence 必须为 0。 // 不能与 AccountTxnID 一起使用。 ticketSequence?: number; // 验证此交易来自其声称的账户的签名。 txnSignature?: string; }
interface Memo { memo: { memoType?: string; memoData?: string; memoFormat?: string; }; }

更多关于 memo 的技术细节请参考 这里

interface Signer { signer: { account: string; txnSignature: string; signingPubKey: string; }; }

更多关于 signers 的技术细节请参考 这里

最后更新于: