๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Hooks ๊ณ ๊ธ‰

์ด๋ฒˆ ์žฅ์—์„œ๋Š” Hooks์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. Hook ์ƒ์•  ์ฃผ๊ธฐ (Life Cycle)โ€‹

์„ค๋ช… ์ถ”๊ฐ€

1.1. ์ƒ์„ฑ (Creation)โ€‹

Hook์„ ์ƒ์„ฑํ•˜๊ณ , ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ €, Hook ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  WASM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ, SetHook ํŠธ๋žœ์žญ์…˜์— ์›ํ•˜๋Š” Hook parameter๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ•ด๋‹น Hook์„ ๊ณ„์ •์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1.1.1. Hook ์ปดํŒŒ์ผโ€‹

  1. ์ปดํŒŒ์ผ ์ ˆ์ฐจ

    • Hook๋Š” ์ปดํŒŒ์ผ ์‹œ .wasm ์ด์ง„ ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • Hook๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด wasmcc๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , wasm2wat ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ง„ ํ˜•์‹์„ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์›น์–ด์…ˆ๋ธ”๋ฆฌ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปดํŒŒ์ผ ์ค‘ ์ค‘์š”ํ•œ ์‚ฌํ•ญ

    • Hook๋Š” Hooks API์—์„œ๋งŒ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋“œ์‹œ cbak ๋ฐ hook ํ•จ์ˆ˜๋งŒ ๋‚ด๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ์›น์–ด์…ˆ๋ธ”๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งํ‚น์„ ์œ„ํ•ด ์ถ”๊ฐ€ export๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ถˆํ•„์š”ํ•œ export๊ฐ€ ์žˆ์œผ๋ฉด ์œ ํšจํ•œ Hook๋„ ๊ฑฐ๋ถ€๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • Hook๋ฅผ ์ปดํŒŒ์ผ ํ•œ ํ›„ Hook Cleaner Utility๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ export๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1.1.2. Hook ๋งค๊ฐœ๋ณ€์ˆ˜ (Parameters)โ€‹

  1. Hook ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •์˜

    • Hook ๊ฐœ๋ฐœ์ž๋Š” Hook์— ์„ค์น˜ ์‹œ๊ฐ„ ๋งค๊ฐœ๋ณ€์ˆ˜(Hook ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๊ณ  ํ•จ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋Ÿฌํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์„ค์ •๋˜๋ฉฐ, ์‹คํ–‰ ์‹œ๊ฐ„ ๋™์•ˆ Hook์— ์˜ํ•ด ๊ฒ€์ƒ‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ParameterName(ํ‚ค) ๋ฐ ParameterValue๋Š” ๊ฐ๊ฐ ์ตœ๋Œ€ 32 ๋ฐ”์ดํŠธ์™€ 128 ๋ฐ”์ดํŠธ์˜ ๊ธธ์ด๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  2. ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •

    • SetHook ํŠธ๋žœ์žญ์…˜์€ ์„ค์น˜๋œ Hook ๋‹น ์ตœ๋Œ€ 16๊ฐœ์˜ Hook ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Hook ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด์€ ์•„๋ž˜์— ํ‘œ์‹œ๋œ ๋Œ€๋กœ ๊ฐ Hook์˜ Hook ๋ฐฐ์—ด ๋‚ด์—์„œ ์„ ํƒ์ ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  3. ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜

    • Hook๋ฅผ ์ฒ˜์Œ ์„ค์ •ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” Hook ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ํ•ด๋‹น Hook์˜ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ดํ›„ ๋™์ผํ•œ HookDefinition์„ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์›๋ž˜ ์„ค์ •๋œ Hook ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ํ›„์† ์‚ฌ์šฉ์ž๋Š” ์„ค์น˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ์ž์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. Hook ๋‚ด์—์„œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ

    • ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น Hook์— ์„ค์ •๋œ ํ›„ hook_param์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Hook Chain์— ์—ฌ๋Ÿฌ Hook๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด hook_param_set์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๊ณ„์ •์˜ ์ฒด์ธ์—์„œ ๋” ์•„๋ž˜์— ์žˆ๋Š” Hook์˜ Hook ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.1.3. SetHook ํŠธ๋žœ์žญ์…˜โ€‹

SetHook ํŠธ๋žœ์žญ์…˜์€ XRPL ๊ณ„์ •์— Hook๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” ์›ํ•˜๋Š” ๊ณ„์ •์— ์›น์–ด์…ˆ๋ธ”๋ฆฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ˜•์‹์˜ Hook๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠธ๋žœ์žญ์…˜์€ ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€๋งŒ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

{
Account: "r4GDFMLGJUKMjNhhycgt2d5LXCdXzCYPoc",
TransactionType: "SetHook",
Fee: "2000000",
Hooks:
[
{
Hook: {
CreateCode: fs.readFileSync('accept.wasm').toString('hex').toUpperCase(),
HookOn: '0000000000000000',
HookNamespace: addr.codec.sha256('accept').toString('hex').toUpperCase(),
HookApiVersion: 0
}
}
]
}
  1. ํŠธ๋žœ์žญ์…˜ ๊ตฌ์กฐ

    SetHook ํŠธ๋žœ์žญ์…˜์˜ ์ฃผ์š” ๋‚ด์šฉ์€ Hooks ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด์€ ๊ณ„์ •์— ์„ค์น˜๋œ Hook Chain์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์œ„์น˜ 0์€ Hook Chain์˜ ์œ„์น˜ 0์— ํ•ด๋‹นํ•˜๊ณ , ์œ„์น˜ 3์€ ์œ„์น˜ 3์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  2. HookSet ๊ฐ์ฒด์™€ ๋Œ€์‘ํ•˜๋Š” Hook

    Hooks ๋ฐฐ์—ด์˜ ๊ฐ ํ•ญ๋ชฉ์€ HookSet ๊ฐ์ฒด๋กœ, ๊ณ„์ •์˜ Hook Chain์— ์žˆ๋Š” ํ•ด๋‹น Hook์„ ๋Œ€์‘ํ•˜๋Š” Hook์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  3. HookDefinition

    ๊ฐ ๋Œ€์‘ํ•˜๋Š” Hook์€ HookDefinition ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์›น์–ด์…ˆ๋ธ”๋ฆฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๋„คํŠธ์›Œํฌ์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋ฏ€๋กœ, ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด ๊ฐ™์€ Hook์€ ํ•˜๋‚˜์˜ HookDefinition ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. Reference Counting์€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ณ„์ •์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  4. Hook ๊ธฐ๋ณธ๊ฐ’

    HookDefinition์ด ์ƒ์„ฑ๋  ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ ์ดˆ๊ธฐ ํŒŒ๋ผ๋ฏธํ„ฐ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ๊ถŒํ•œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’๋“ค์€ Hook ๊ธฐ๋ณธ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค Hook์ด ์ด Hook Definition์„ ์ฐธ์กฐํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ SetHook ํŠธ๋žœ์žญ์…˜์—์„œ ์ด ์ฐธ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋‚˜ ํ›„์† ์—…๋ฐ์ดํŠธ ์ž‘์—…์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. HookSet ์ž‘์—…

    ์ด ์—ฌ์„ฏ ๊ฐ€์ง€ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค: No Operation, Create, Update, Delete, Install ๋ฐ Namespace Delete. ๊ฐ ์ž‘์—…์€ HookSet ๊ฐ์ฒด์˜ ํ•„๋“œ์˜ ํฌํ•จ ๋˜๋Š” ์ƒ๋žต์— ๋”ฐ๋ผ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฒ˜์Œ์—๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ํ†ตํ•ด ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์„ฑ, ์ œ์ถœ, ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์ง€์นจ์€ XRPL ๋ฌธ์„œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.2. ์‹คํ–‰ (Execution)โ€‹

1.2.1. HookOn ํ•„๋“œโ€‹

๊ฐœ์š”

HookOn ํ•„๋“œ๋Š” ํŠน์ • ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์— ๋Œ€ํ•œ ํ›„ํฌ์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋‚ด์šฉ

  • HookOn ํ•„๋“œ ๊ตฌ์กฐ

    • HookOn์€ 256๋น„ํŠธ ๋ฌด๋ถ€ํ˜ธ ์ •์ˆ˜๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ๋น„ํŠธ๋Š” ํŠน์ • ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์—์„œ ํ›„ํฌ๊ฐ€ ์‹คํ–‰๋ ์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋น„ํŠธ๋Š” active low ์ƒํƒœ์ด์ง€๋งŒ 22๋ฒˆ์งธ ๋น„ํŠธ๋งŒ active high ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
    • ttHOOK_SET๋Š” 22๋ฒˆ์งธ ๋น„ํŠธ์— ๋Œ€์‘ํ•˜๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์ด 0์ผ ๋•Œ๋Š” SetHook ํŠธ๋žœ์žญ์…˜์— ๋ฐ˜์‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋น„ํŠธ ๋„˜๋ฒ„๋ง ๋ฐฉ์‹

    • ์ตœํ•˜์œ„ ๋น„ํŠธ: ๋น„ํŠธ 0 (๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ)
    • ์ตœ์ƒ์œ„ ๋น„ํŠธ: ๋น„ํŠธ 63 (๊ฐ€์žฅ ์™ผ์ชฝ)
  • ์˜ˆ์ œ ์ฝ”๋“œ

    • ํ›„ํฌ๋ฅผ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”:
    ~(1ULL << 22) /* ๋ชจ๋“  ๋น„ํŠธ๋Š” 1, 22๋ฒˆ์งธ ๋น„ํŠธ๋งŒ 0 */
    • ttPAYMENT๋งŒ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋น„ํ™œ์„ฑํ™”:
    ~(1ULL << 22) & ~(1ULL)
    • ttHOOK_SET ์ œ์™ธ ๋ชจ๋“  ๊ฒƒ์—์„œ ํ™œ์„ฑํ™”:
    0
    • ttHOOK_SET ๋ฐ ๋‹ค๋ฅธ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์—์„œ ํ™œ์„ฑํ™”:
    (1ULL << 22)

์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค

  • ํ›„ํฌ์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•˜๋ ค๋ฉด HookOn Calculator๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

1.2.2. Chainingโ€‹

XRPL์˜ Hook์€ "ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ์ž‘์—…์„ ์ •๋ง ์ž˜ ํ•ด์•ผ ํ•œ๋‹ค"๋Š” ์›์น™์— ๋”ฐ๋ผ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, 'Hook Chaining' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ•œ ๊ณ„์ •์— ์—ฌ๋Ÿฌ Hook์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ , ๊ฐ๊ฐ์˜ Hook์ด ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ „๋ฌธ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒด์ธ ๊ตฌ์„ฑ ๋ฐ ์‹คํ–‰

  • Hook Chain: XRPL ๊ณ„์ •์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” Hook์˜ ์‹œํ€€์Šค๋กœ, ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ์„ค์น˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ์ˆœ์„œ: ์ฒด์ธ์˜ ์‹คํ–‰์€ chain position 0์—์„œ ์‹œ์ž‘ํ•˜์—ฌ chain position 9์—์„œ ๋๋‚ฉ๋‹ˆ๋‹ค. ๋นˆ ์œ„์น˜๋Š” ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ์„ฑ๊ณต ์กฐ๊ฑด: ์†ก์‹ ์ธก๊ณผ ์ˆ˜์‹ ์ธก์˜ Hook Chain์ด ๋ชจ๋‘ ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋Ÿฐํƒ€์ž„์—์„œ์˜ ์กฐ์ž‘

  • HookHash ํ™•์ธ: hook_hash๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž์‹ ์˜ HookHash๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒด์ธ ์œ„์น˜ ํ™•์ธ: hook_pos๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์‹ ์ด ์ฒด์ธ์˜ ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ Hook ์ œ์–ด:
    • hook_skip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒด์ธ ๋‚ด์˜ ๋‹ค๋ฅธ Hook์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • hook_param_set์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒด์ธ ๋‚ด์˜ ๋‹ค๋ฅธ Hook์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฝํ•œ ์‹คํ–‰ (Weak Executions)

  • hook_again ํ˜ธ์ถœ: Hook์ด ๋‘ ๋ฒˆ์งธ '์•ฝํ•œ ์‹คํ–‰'์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Weak Execution ์ˆœ์„œ: ์›๋ž˜ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉ๋œ ํ›„์—๋งŒ ์•ฝํ•œ ์‹คํ–‰์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํ–‰์€ ํŠน์ • ์ˆœ์„œ(์˜ˆ: Account ID๋‚˜ Hook ์œ„์น˜ ๋“ฑ)์— ๋”ฐ๋ผ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

1.3. ์ข…๋ฃŒ (Termination)โ€‹

1.3.1. Accept & Rollbackโ€‹

Accept์™€ Rollback์€ hookapi์˜ ํ•จ์ˆ˜๋“ค์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด, Hook์€ ์ž์‹ ์ด ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์„ XRPL์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Accept

  • ์šฉ๋„: Hook์˜ ์‹คํ–‰์„ '์„ฑ๊ณต' ์ƒํƒœ๋กœ ์ข…๋ฃŒํ•˜๊ณ , ๊ทธ ๋™์•ˆ Hook์ด ์ˆ˜ํ–‰ํ•œ ๋ชจ๋“  ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์ž‘:
    • ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์ปค๋ฐ‹(Commit)
    • emit() ํŠธ๋žœ์žญ์…˜ ์ œ์ถœ
    • ์›๋ž˜์˜ ํŠธ๋žœ์žญ์…˜์„ ๊ณ„์† ์ง„ํ–‰
  • ์ฃผ์˜์‚ฌํ•ญ: ๋งŒ์•ฝ ์›๋ž˜ ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ์ด์œ ๋กœ ์ค‘๋‹จ๋œ๋‹ค๋ฉด, 'Accept'๋Š” 'Rollback'์ด ๋ฉ๋‹ˆ๋‹ค.

Rollback

  • ์šฉ๋„: Hook์˜ ์‹คํ–‰์„ '์‹คํŒจ' ์ƒํƒœ๋กœ ์ข…๋ฃŒํ•˜๊ณ , ๊ทธ ๋™์•ˆ Hook์ด ์ˆ˜ํ–‰ํ•œ ๋ชจ๋“  ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ํ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์ž‘:
    • ๋ชจ๋“  ์ƒํƒœ ๋ณ€ํ™” ํ๊ธฐ
    • emit() ํŠธ๋žœ์žญ์…˜ ํ๊ธฐ
    • ์›๋ž˜์˜ ํŠธ๋žœ์žญ์…˜์„ ์ค‘์ง€
  • ์ฃผ์˜์‚ฌํ•ญ: ์›๋ž˜ ํŠธ๋žœ์žญ์…˜์€ tecHOOK_REJECTED ์ƒํƒœ์™€ ํ•จ๊ป˜ ์‹คํŒจํ•˜๋ฉฐ, ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ๋ถ€๊ณผ๋ฉ๋‹ˆ๋‹ค.

1.3.2. HookDefinition ์‚ญ์ œโ€‹

Hook์„ ์„ค์น˜ํ•œ ๊ณ„์ •์ด ์—†์–ด์ ธ์„œ ํ•ด๋‹น HookDefinition ๊ฐ์ฒด์˜ Reference Counting ๊ฐ’์ด 0์ด ๋˜๋ฉด, ํ•ด๋‹น HookDefinition ๊ฐ์ฒด๋Š” ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

2. Advanced Hook Featuresโ€‹

2.1. Ledger ๋ฐ์ดํ„ฐ์™€์˜ ์ƒํ˜ธ์ž‘์šฉโ€‹

2.1.1. Slots์™€ Keyletsโ€‹

2.1.2. State Managementโ€‹

2.1.3. Namespaceโ€‹

2.2 Emitting Transactionsโ€‹

2.3 Data representation in Hooksโ€‹

  • Serialized Objects
  • Floating Point Numbers (XFL)

2.4 Hook Feesโ€‹

  • Weak and Strong
  • Hook Fees
  • Collect Call

3. Writing Your First Hookโ€‹

4. Best Practices and Common Patternsโ€‹

  • Error Handling
  • Efficient State Management
  • Secure Coding Practices

5. Debugging and Testing Hooksโ€‹

  • Execution Metadata
  • Debugging Hooks

6. Deployment and Production Considerationsโ€‹

7. Community and Further Resourcesโ€‹

  • Forums and Workshops: ์ปค๋ฎค๋‹ˆํ‹ฐ ํฌ๋Ÿผ ๋ฐ ์›Œํฌ์ƒต
  • Sample Projects: ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ

8. Future Developments and Roadmapโ€‹

  • Upcoming Features: ํ–ฅํ›„ ์˜ˆ์ •๋œ ๊ธฐ๋Šฅ
  • Research and Development: ์—ฐ๊ตฌ ๋ฐ ๊ฐœ๋ฐœ ๋ฐฉํ–ฅ

9. Conclusionโ€‹