Make some v2 hooks api preparations
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
} from "./Dialog";
|
||||
import { css } from "../stitches.config";
|
||||
import { Input } from "./Input";
|
||||
import truncate from "../utils/truncate";
|
||||
|
||||
const labelStyle = css({
|
||||
color: "$mauve10",
|
||||
@@ -201,7 +202,9 @@ export const AccountDialog = ({
|
||||
fontFamily: "$monospace",
|
||||
}}
|
||||
>
|
||||
{activeAccount && activeAccount.hooks.length}
|
||||
{activeAccount && console.log(activeAccount.hooks)}
|
||||
{activeAccount &&
|
||||
activeAccount.hooks.map((i) => truncate(i, 6)).join(",")}
|
||||
</Text>
|
||||
</Flex>
|
||||
</Flex>
|
||||
@@ -265,9 +268,10 @@ const Accounts: FC<AccountProps> = (props) => {
|
||||
(acc) => acc.address === address
|
||||
);
|
||||
if (accountToUpdate) {
|
||||
accountToUpdate.hooks = res.account_objects
|
||||
.filter((ac: any) => ac?.LedgerEntryType === "Hook")
|
||||
.map((oo: any) => oo.HookHash);
|
||||
accountToUpdate.hooks =
|
||||
res.account_objects
|
||||
.find((ac: any) => ac?.LedgerEntryType === "Hook")
|
||||
?.Hooks?.map((oo: any) => oo.Hook.HookHash) || [];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ const DebugStream = () => {
|
||||
const { selectedAccount, logs, socket } = useSnapshot(streamState);
|
||||
const { accounts } = useSnapshot(state);
|
||||
|
||||
const accountOptions = accounts.map(acc => ({
|
||||
const accountOptions = accounts.map((acc) => ({
|
||||
label: acc.name,
|
||||
value: acc.address,
|
||||
}));
|
||||
@@ -33,7 +33,7 @@ const DebugStream = () => {
|
||||
options={accountOptions}
|
||||
hideSelectedOptions
|
||||
value={selectedAccount}
|
||||
onChange={acc => (streamState.selectedAccount = acc as any)}
|
||||
onChange={(acc) => (streamState.selectedAccount = acc as any)}
|
||||
css={{ width: "100%" }}
|
||||
/>
|
||||
</>
|
||||
@@ -73,7 +73,7 @@ const DebugStream = () => {
|
||||
socket?.close();
|
||||
streamState.socket = ref(
|
||||
new WebSocket(
|
||||
`wss://hooks-testnet-debugstream.xrpl-labs.com/${account}`
|
||||
`wss://hooks-testnet-debugstream-v2.xrpl-labs.com/${account}`
|
||||
)
|
||||
);
|
||||
} else if (!account && socket) {
|
||||
|
||||
@@ -22,7 +22,7 @@ export default async function handler(
|
||||
return res.status(405).json({ error: 'Method not allowed!' })
|
||||
}
|
||||
try {
|
||||
const response = await fetch('https://hooks-testnet.xrpl-labs.com/newcreds', { method: 'POST' });
|
||||
const response = await fetch('https://hooks-testnet-v2.xrpl-labs.com/newcreds', { method: 'POST' });
|
||||
const json: Faucet | ErrorResponse = await response.json();
|
||||
if ("error" in json) {
|
||||
return res.status(429).json(json)
|
||||
|
||||
@@ -1,419 +0,0 @@
|
||||
diff --git a/node_modules/ripple-binary-codec/dist/enums/definitions.json b/node_modules/ripple-binary-codec/dist/enums/definitions.json
|
||||
index 2333c42..b8f8eab 100644
|
||||
--- a/node_modules/ripple-binary-codec/dist/enums/definitions.json
|
||||
+++ b/node_modules/ripple-binary-codec/dist/enums/definitions.json
|
||||
@@ -1,3 +1,4 @@
|
||||
+
|
||||
{
|
||||
"TYPES": {
|
||||
"Validation": 10003,
|
||||
@@ -40,9 +41,7 @@
|
||||
"Check": 67,
|
||||
"Nickname": 110,
|
||||
"Contract": 99,
|
||||
- "NFTokenPage": 80,
|
||||
- "NFTokenOffer": 55,
|
||||
- "NegativeUNL": 78
|
||||
+ "GeneratorMap": 103
|
||||
},
|
||||
"FIELDS": [
|
||||
[
|
||||
@@ -95,16 +94,6 @@
|
||||
"type": "UInt16"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "TransferFee",
|
||||
- {
|
||||
- "nth": 4,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "UInt16"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"Flags",
|
||||
{
|
||||
@@ -455,6 +444,16 @@
|
||||
"type": "UInt32"
|
||||
}
|
||||
],
|
||||
+ [
|
||||
+ "EmitGeneration",
|
||||
+ {
|
||||
+ "nth": 43,
|
||||
+ "isVLEncoded": false,
|
||||
+ "isSerialized": true,
|
||||
+ "isSigningField": true,
|
||||
+ "type": "UInt32"
|
||||
+ }
|
||||
+ ],
|
||||
[
|
||||
"IndexNext",
|
||||
{
|
||||
@@ -635,16 +634,6 @@
|
||||
"type": "Hash256"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "TokenID",
|
||||
- {
|
||||
- "nth": 10,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Hash256"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"BookDirectory",
|
||||
{
|
||||
@@ -916,7 +905,7 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "URI",
|
||||
+ "Generator",
|
||||
{
|
||||
"nth": 5,
|
||||
"isVLEncoded": true,
|
||||
@@ -1045,36 +1034,6 @@
|
||||
"type": "Blob"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "UNLModifyValidator",
|
||||
- {
|
||||
- "nth": 19,
|
||||
- "isVLEncoded": true,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Blob"
|
||||
- }
|
||||
- ],
|
||||
- [
|
||||
- "ValidatorToDisable",
|
||||
- {
|
||||
- "nth": 20,
|
||||
- "isVLEncoded": true,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Blob"
|
||||
- }
|
||||
- ],
|
||||
- [
|
||||
- "ValidatorToReEnable",
|
||||
- {
|
||||
- "nth": 21,
|
||||
- "isVLEncoded": true,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Blob"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"Account",
|
||||
{
|
||||
@@ -1156,7 +1115,7 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "Minter",
|
||||
+ "EmitCallback",
|
||||
{
|
||||
"nth": 9,
|
||||
"isVLEncoded": true,
|
||||
@@ -1276,9 +1235,9 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "NonFungibleToken",
|
||||
+ "Signer",
|
||||
{
|
||||
- "nth": 12,
|
||||
+ "nth": 16,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1286,9 +1245,9 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "Signer",
|
||||
+ "Majority",
|
||||
{
|
||||
- "nth": 16,
|
||||
+ "nth": 18,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1296,9 +1255,9 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "Majority",
|
||||
+ "DisabledValidator",
|
||||
{
|
||||
- "nth": 18,
|
||||
+ "nth": 19,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1306,9 +1265,9 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "DisabledValidator",
|
||||
+ "EmitDetails",
|
||||
{
|
||||
- "nth": 19,
|
||||
+ "nth": 12,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1395,16 +1354,6 @@
|
||||
"type": "STArray"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "NonFungibleTokens",
|
||||
- {
|
||||
- "nth": 10,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "STArray"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"Majorities",
|
||||
{
|
||||
@@ -1415,16 +1364,6 @@
|
||||
"type": "STArray"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "DisabledValidators",
|
||||
- {
|
||||
- "nth": 17,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "STArray"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"CloseResolution",
|
||||
{
|
||||
@@ -1535,16 +1474,6 @@
|
||||
"type": "Vector256"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "TokenIDs",
|
||||
- {
|
||||
- "nth": 4,
|
||||
- "isVLEncoded": true,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Vector256"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"Transaction",
|
||||
{
|
||||
@@ -1596,7 +1525,7 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "TicketCount",
|
||||
+ "HookStateCount",
|
||||
{
|
||||
"nth": 40,
|
||||
"isVLEncoded": false,
|
||||
@@ -1606,7 +1535,7 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "TicketSequence",
|
||||
+ "HookReserveCount",
|
||||
{
|
||||
"nth": 41,
|
||||
"isVLEncoded": false,
|
||||
@@ -1616,7 +1545,7 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "TokenTaxon",
|
||||
+ "HookDataMaxSize",
|
||||
{
|
||||
"nth": 42,
|
||||
"isVLEncoded": false,
|
||||
@@ -1626,23 +1555,23 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "MintedTokens",
|
||||
+ "HookOn",
|
||||
{
|
||||
- "nth": 43,
|
||||
+ "nth": 16,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
- "type": "UInt32"
|
||||
+ "type": "UInt64"
|
||||
}
|
||||
],
|
||||
[
|
||||
- "BurnedTokens",
|
||||
+ "EmitBurden",
|
||||
{
|
||||
- "nth": 44,
|
||||
+ "nth": 12,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
- "type": "UInt32"
|
||||
+ "type": "UInt64"
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -1686,29 +1615,9 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "PreviousPageMin",
|
||||
+ "EmitParentTxnID",
|
||||
{
|
||||
- "nth": 26,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Hash256"
|
||||
- }
|
||||
- ],
|
||||
- [
|
||||
- "NextPageMin",
|
||||
- {
|
||||
- "nth": 27,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "Hash256"
|
||||
- }
|
||||
- ],
|
||||
- [
|
||||
- "BuyOffer",
|
||||
- {
|
||||
- "nth": 28,
|
||||
+ "nth": 10,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1716,9 +1625,9 @@
|
||||
}
|
||||
],
|
||||
[
|
||||
- "SellOffer",
|
||||
+ "EmitNonce",
|
||||
{
|
||||
- "nth": 29,
|
||||
+ "nth": 11,
|
||||
"isVLEncoded": false,
|
||||
"isSerialized": true,
|
||||
"isSigningField": true,
|
||||
@@ -1735,16 +1644,6 @@
|
||||
"type": "UInt8"
|
||||
}
|
||||
],
|
||||
- [
|
||||
- "UNLModifyDisabling",
|
||||
- {
|
||||
- "nth": 17,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "UInt8"
|
||||
- }
|
||||
- ],
|
||||
[
|
||||
"DestinationNode",
|
||||
{
|
||||
@@ -1754,36 +1653,6 @@
|
||||
"isSigningField": true,
|
||||
"type": "UInt64"
|
||||
}
|
||||
- ],
|
||||
- [
|
||||
- "Cookie",
|
||||
- {
|
||||
- "nth": 10,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "UInt64"
|
||||
- }
|
||||
- ],
|
||||
- [
|
||||
- "ServerVersion",
|
||||
- {
|
||||
- "nth": 11,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "UInt64"
|
||||
- }
|
||||
- ],
|
||||
- [
|
||||
- "OfferNode",
|
||||
- {
|
||||
- "nth": 12,
|
||||
- "isVLEncoded": false,
|
||||
- "isSerialized": true,
|
||||
- "isSigningField": true,
|
||||
- "type": "UInt64"
|
||||
- }
|
||||
]
|
||||
],
|
||||
"TRANSACTION_RESULTS": {
|
||||
@@ -1908,18 +1777,7 @@
|
||||
"tecDUPLICATE": 149,
|
||||
"tecKILLED": 150,
|
||||
"tecHAS_OBLIGATIONS": 151,
|
||||
- "tecTOO_SOON": 152,
|
||||
-
|
||||
- "tecMAX_SEQUENCE_REACHED": 154,
|
||||
- "tecNO_SUITABLE_PAGE": 155,
|
||||
- "tecBUY_SELL_MISMATCH": 156,
|
||||
- "tecOFFER_TYPE_MISMATCH": 157,
|
||||
- "tecCANT_ACCEPT_OWN_OFFER": 158,
|
||||
- "tecINSUFFICIENT_FUNDS": 159,
|
||||
- "tecOBJECT_NOT_FOUND": 160,
|
||||
- "tecINSUFFICIENT_PAYMENT": 161,
|
||||
- "tecINCORRECT_ASSET": 162,
|
||||
- "tecTOO_MANY": 163
|
||||
+ "tecTOO_SOON": 152
|
||||
},
|
||||
"TRANSACTION_TYPES": {
|
||||
"Invalid": -1,
|
||||
@@ -1946,13 +1804,11 @@
|
||||
"DepositPreauth": 19,
|
||||
"TrustSet": 20,
|
||||
"AccountDelete": 21,
|
||||
- "NFTokenMint": 25,
|
||||
- "NFTokenBurn": 26,
|
||||
- "NFTokenCreateOffer": 27,
|
||||
- "NFTokenCancelOffer": 28,
|
||||
- "NFTokenAcceptOffer": 29,
|
||||
+ "SetHook": 22,
|
||||
+ "Invoke": 23,
|
||||
+ "Batch": 24,
|
||||
+
|
||||
"EnableAmendment": 100,
|
||||
- "SetFee": 101,
|
||||
- "UNLModify": 102
|
||||
+ "SetFee": 101
|
||||
}
|
||||
}
|
||||
1755
patches/ripple-binary-codec+1.3.2.patch
Normal file
1755
patches/ripple-binary-codec+1.3.2.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,7 @@
|
||||
import { derive, sign } from "xrpl-accountlib";
|
||||
|
||||
import state, { IAccount } from "../index";
|
||||
import calculateHookOn from "../../utils/hookOnCalculator";
|
||||
|
||||
function arrayBufferToHex(arrayBuffer?: ArrayBuffer | null) {
|
||||
if (!arrayBuffer) {
|
||||
@@ -49,13 +50,35 @@ export const deployHook = async (account: IAccount & { name?: string }) => {
|
||||
const tx = {
|
||||
Account: account.address,
|
||||
TransactionType: "SetHook",
|
||||
CreateCode: arrayBufferToHex(
|
||||
state.files?.[state.active]?.compiledContent
|
||||
).toUpperCase(),
|
||||
HookOn: "0000000000000000",
|
||||
Sequence: account.sequence,
|
||||
Fee: "1000",
|
||||
Fee: "100000",
|
||||
Hooks: [
|
||||
// {
|
||||
// Hook: {
|
||||
// CreateCode:
|
||||
// HookApiVersion: 0,
|
||||
// HookNamespace: "Kissa",
|
||||
// HookOn: calculateHookOn([]),
|
||||
// Flags: 2
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// [
|
||||
{
|
||||
Hook: {
|
||||
CreateCode: arrayBufferToHex(
|
||||
state.files?.[state.active]?.compiledContent
|
||||
).toUpperCase(),
|
||||
HookOn: calculateHookOn([]),
|
||||
HookNamespace: "DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF",
|
||||
HookApiVersion: 0,
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
console.log(tx)
|
||||
|
||||
const keypair = derive.familySeed(account.secret);
|
||||
const { signedTransaction } = sign(tx, keypair);
|
||||
const currentAccount = state.accounts.find(
|
||||
@@ -69,6 +92,7 @@ export const deployHook = async (account: IAccount & { name?: string }) => {
|
||||
command: "submit",
|
||||
tx_blob: signedTransaction,
|
||||
});
|
||||
console.log(submitRes)
|
||||
if (submitRes.engine_result === "tesSUCCESS") {
|
||||
state.deployLogs.push({
|
||||
type: "success",
|
||||
@@ -81,7 +105,7 @@ export const deployHook = async (account: IAccount & { name?: string }) => {
|
||||
} else {
|
||||
state.deployLogs.push({
|
||||
type: "error",
|
||||
message: `[${submitRes.engine_result}] ${submitRes.engine_result_message}`,
|
||||
message: `[${submitRes.engine_result || submitRes.error}] ${submitRes.engine_result_message || submitRes.error_exception}`,
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
|
||||
@@ -120,9 +120,8 @@ const state = proxy<IState>({
|
||||
accounts: initialAccounts.length > 0 ? initialAccounts : [],
|
||||
logs: [],
|
||||
});
|
||||
|
||||
// Initialize socket connection
|
||||
const client = new XrplClient("wss://hooks-testnet.xrpl-labs.com");
|
||||
const client = new XrplClient("wss://hooks-testnet-v2.xrpl-labs.com");
|
||||
|
||||
client.on("online", () => {
|
||||
state.client = ref(client);
|
||||
|
||||
41
utils/hookOnCalculator.ts
Normal file
41
utils/hookOnCalculator.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
const tts = {
|
||||
ttPAYMENT: 0,
|
||||
ttESCROW_CREATE: 1,
|
||||
ttESCROW_FINISH: 2,
|
||||
ttACCOUNT_SET: 3,
|
||||
ttESCROW_CANCEL: 4,
|
||||
ttREGULAR_KEY_SET: 5,
|
||||
ttOFFER_CREATE: 7,
|
||||
ttOFFER_CANCEL: 8,
|
||||
ttTICKET_CREATE: 10,
|
||||
ttSIGNER_LIST_SET: 12,
|
||||
ttPAYCHAN_CREATE: 13,
|
||||
ttPAYCHAN_FUND: 14,
|
||||
ttPAYCHAN_CLAIM: 15,
|
||||
ttCHECK_CREATE: 16,
|
||||
ttCHECK_CASH: 17,
|
||||
ttCHECK_CANCEL: 18,
|
||||
ttDEPOSIT_PREAUTH: 19,
|
||||
ttTRUST_SET: 20,
|
||||
ttACCOUNT_DELETE: 21,
|
||||
ttHOOK_SET: 22
|
||||
};
|
||||
|
||||
type TTS = typeof tts;
|
||||
|
||||
const calculateHookOn = (arr: (keyof TTS)[]) => {
|
||||
let start = '0x0000000000000000';
|
||||
arr.forEach(n => {
|
||||
let v = BigInt(start);
|
||||
v ^= (BigInt(1) << BigInt(tts[n]));
|
||||
let s = v.toString(16);
|
||||
let l = s.length;
|
||||
if (l < 16)
|
||||
s = '0'.repeat(16 - l) + s;
|
||||
s = '0x' + s;
|
||||
start = s;
|
||||
})
|
||||
return start.substring(2);
|
||||
}
|
||||
|
||||
export default calculateHookOn
|
||||
Reference in New Issue
Block a user