[{"data":1,"prerenderedAt":1179},["ShallowReactive",2],{"docs:id:\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate":3},{"id":4,"title":5,"body":6,"cover":1170,"description":1171,"extension":1172,"meta":1173,"navigation":1174,"path":1175,"seo":1176,"stem":1177,"__hash__":1178},"docs\u002Fid\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate.md","Membangun di Duel",{"type":7,"value":8,"toc":1163},"minimark",[9,13,17,22,29,131,187,215,219,225,306,313,339,345,351,452,455,537,560,567,660,701,704,724,785,803,807,865,884,888,1104,1111,1115,1159],[10,11,5],"h1",{"id":12},"membangun-di-duel",[14,15,16],"p",{},"Pool Duel adalah pool Uniswap V4 standar dengan sebuah hook, dan setiap angka yang ditampilkan aplikasi berasal dari view dan event publik. Bot, terminal, dasbor, dan agregator dapat membangun di atasnya tanpa perlu meminta izin.",[18,19,21],"h2",{"id":20},"membaca-duel","Membaca duel",[14,23,24,28],{},[25,26,27],"code",{},"DuelLens"," mengumpulkan semua hal tentang sebuah duel dalam satu panggilan:",[30,31,36],"pre",{"className":32,"code":33,"language":34,"meta":35,"style":35},"language-solidity shiki shiki-themes vitesse-light vitesse-dark","function getPair(uint256 pairId) external view returns (PairView memory);\nfunction getPairs(uint256 offset, uint256 limit) external view returns (PairView[] memory);\n","solidity","",[25,37,38,88],{"__ignoreMap":35},[39,40,43,47,51,55,59,63,66,69,72,76,79,82,85],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"s5TCs","function",[39,48,50],{"class":49},"s_xSY"," getPair",[39,52,54],{"class":53},"si6no","(",[39,56,58],{"class":57},"s_NWU","uint256",[39,60,62],{"class":61},"s9nN2"," pairId",[39,64,65],{"class":53},")",[39,67,68],{"class":45}," external",[39,70,71],{"class":45}," view",[39,73,75],{"class":74},"sTPum"," returns",[39,77,78],{"class":53}," (",[39,80,81],{"class":45},"PairView",[39,83,84],{"class":45}," memory",[39,86,87],{"class":53},");\n",[39,89,91,93,96,98,100,103,106,109,112,114,116,118,120,122,124,127,129],{"class":41,"line":90},2,[39,92,46],{"class":45},[39,94,95],{"class":49}," getPairs",[39,97,54],{"class":53},[39,99,58],{"class":57},[39,101,102],{"class":61}," offset",[39,104,105],{"class":53},",",[39,107,108],{"class":57}," uint256",[39,110,111],{"class":61}," limit",[39,113,65],{"class":53},[39,115,68],{"class":45},[39,117,71],{"class":45},[39,119,75],{"class":74},[39,121,78],{"class":53},[39,123,81],{"class":45},[39,125,126],{"class":53},"[]",[39,128,84],{"class":45},[39,130,87],{"class":53},[14,132,133,134,136,137,140,141,144,145,148,149,152,153,156,157,160,161,164,165,168,169,172,173,176,177,152,180,152,183,186],{},"Sebuah ",[25,135,81],{}," memuat id duel, kreator, dan URI metadatanya, kedua sisi (token, nama, simbol, suplai, harga dan tick pool, ETH per token, ETH nyata di pool), tiga kunci pool, proporsi saat ini (",[25,138,139],{},"gaugeBps",", bagian sisi A dalam basis poin), rata-rata ronde sejauh ini (",[25,142,143],{},"roundGaugeBps","), pot, biaya kreator, volume dan pembelian kembali sepanjang masa, pajak anti-snipe saat ini, nomor, awal, dan akhir ronde serta apakah ada transaksi di ronde itu (",[25,146,147],{},"roundTraded","), waktu dan tick peluncuran (",[25,150,151],{},"launchTime",", ",[25,154,155],{},"startTick","), apakah duel itu duel pendukung, kategorinya (",[25,158,159],{},"category",", sesuai penomoran aplikasi, 0 untuk tanpa kategori), ketentuan biayanya (",[25,162,163],{},"fees","), dan porsi dari bagiannya yang kini diambil protokol (",[25,166,167],{},"protocolRateBps",", dari 10.000): protokol mendapat ",[25,170,171],{},"fees.protocolShareBps × protocolRateBps \u002F 10.000"," dari biaya swap, dan pot mendapat sisa dari bagian itu. Di kontrak dan ABI-nya, sisi B adalah ",[25,174,175],{},"D",": ",[25,178,179],{},"d",[25,181,182],{},"tokenD",[25,184,185],{},"keyD",".",[14,188,189,190,152,193,152,196,152,199,152,202,152,205,152,208,211,212,186],{},"Hook memiliki view yang lebih kecil: ",[25,191,192],{},"pairCount()",[25,194,195],{},"getPair(pairId)",[25,197,198],{},"poolKeys(pairId)",[25,200,201],{},"gaugeBps(pairId)",[25,203,204],{},"snipeTaxBps(pairId)",[25,206,207],{},"protocolRateBps()",[25,209,210],{},"protocolFees()",", dan ",[25,213,214],{},"firstRoundEnd(launchTime)",[18,216,218],{"id":217},"bertransaksi","Bertransaksi",[14,220,221,222,224],{},"Router Uniswap V4 mana pun dapat bertransaksi di pool sebuah duel. Susun kunci pool dari ",[25,223,198],{},":",[226,227,228,250],"table",{},[229,230,231],"thead",{},[232,233,234,238,241,244,247],"tr",{},[235,236,237],"th",{},"Pool",[235,239,240],{},"currency0",[235,242,243],{},"currency1",[235,245,246],{},"fee",[235,248,249],{},"tickSpacing",[251,252,253,274,290],"tbody",{},[232,254,255,259,265,268,271],{},[256,257,258],"td",{},"ETH \u002F A",[256,260,261,262,65],{},"ETH (",[25,263,264],{},"address(0)",[256,266,267],{},"token A",[256,269,270],{},"0",[256,272,273],{},"200",[232,275,276,279,283,286,288],{},[256,277,278],{},"ETH \u002F B",[256,280,261,281,65],{},[25,282,264],{},[256,284,285],{},"token B",[256,287,270],{},[256,289,273],{},[232,291,292,295,298,301,303],{},[256,293,294],{},"A \u002F B",[256,296,297],{},"alamat token yang lebih kecil",[256,299,300],{},"yang lebih besar",[256,302,270],{},[256,304,305],{},"60",[14,307,308,309,312],{},"Hook memungut biayanya melalui return delta, jadi ambil kuotasi dengan V4 Quoter: jawabannya mencakup setiap biaya dan pajak. Peralihan melalui ETH adalah ",[25,310,311],{},"quoteExactInput","-nya di sepanjang jalur token → ETH → token lainnya.",[14,314,315,316,319,320,322,323,326,327,330,331,334,335,338],{},"Swap yang biayanya dipungut hook sebelum berjalan (pembelian atau peralihan dengan input pasti, penjualan dengan output pasti) harus terisi penuh: swap yang akan terhenti lebih awal karena batas harganya, atau karena pool ETH kekurangan ETH, di-revert dengan ",[25,317,318],{},"PartialFill",". PoolManager membungkus error dari hook: ",[25,321,318],{}," dan ",[25,324,325],{},"ArbitrageStarved"," tiba di dalam ",[25,328,329],{},"WrappedError(address target, bytes4 selector, bytes reason, bytes details)",", dan di dalam ",[25,332,333],{},"UnexpectedRevertBytes(bytes revertData)"," ketika V4 Quoter yang melaporkannya. Dekode ",[25,336,337],{},"reason"," untuk membaca error dari hook.",[14,340,341,342,344],{},"Setiap transaksi diakhiri penyelarasan ulang oleh hook, yang butuh gas sendiri: swap yang menyisakan terlalu sedikit gas untuknya di-revert dengan ",[25,343,325],{}," alih-alih melewatinya. Kirim swap dengan gas dari estimasi, jangan pernah kurang, dan beri kelonggaran: swap pertama setelah penutupan sebuah ronde juga menyelesaikan ronde itu (pembelian kembalinya, lalu penyelarasan ulang, sekitar 170.000 gas lebih banyak), yang tidak dihitung oleh estimasi yang dibuat sebelum penutupan. Aplikasi menambahkan 500.000 gas ke setiap estimasi.",[14,346,347,350],{},[25,348,349],{},"DuelRouter"," menyediakan satu panggilan untuk swap di satu pool:",[30,352,354],{"className":32,"code":353,"language":34,"meta":35,"style":35},"function swapExactIn(\n    PoolKey calldata key,\n    bool zeroForOne,\n    uint256 amountIn,\n    uint256 minAmountOut,\n    address recipient,\n    uint256 deadline\n) external payable returns (uint256 amountOut);\n",[25,355,356,366,380,391,402,412,423,431],{"__ignoreMap":35},[39,357,358,360,363],{"class":41,"line":42},[39,359,46],{"class":45},[39,361,362],{"class":49}," swapExactIn",[39,364,365],{"class":53},"(\n",[39,367,368,371,374,377],{"class":41,"line":90},[39,369,370],{"class":45},"    PoolKey",[39,372,373],{"class":45}," calldata",[39,375,376],{"class":61}," key",[39,378,379],{"class":53},",\n",[39,381,383,386,389],{"class":41,"line":382},3,[39,384,385],{"class":57},"    bool",[39,387,388],{"class":61}," zeroForOne",[39,390,379],{"class":53},[39,392,394,397,400],{"class":41,"line":393},4,[39,395,396],{"class":57},"    uint256",[39,398,399],{"class":61}," amountIn",[39,401,379],{"class":53},[39,403,405,407,410],{"class":41,"line":404},5,[39,406,396],{"class":57},[39,408,409],{"class":61}," minAmountOut",[39,411,379],{"class":53},[39,413,415,418,421],{"class":41,"line":414},6,[39,416,417],{"class":57},"    address",[39,419,420],{"class":61}," recipient",[39,422,379],{"class":53},[39,424,426,428],{"class":41,"line":425},7,[39,427,396],{"class":57},[39,429,430],{"class":61}," deadline\n",[39,432,434,436,438,441,443,445,447,450],{"class":41,"line":433},8,[39,435,65],{"class":53},[39,437,68],{"class":45},[39,439,440],{"class":45}," payable",[39,442,75],{"class":74},[39,444,78],{"class":53},[39,446,58],{"class":57},[39,448,449],{"class":61}," amountOut",[39,451,87],{"class":53},[14,453,454],{},"dan satu untuk peralihan melalui ETH, di mana sisi yang Anda tinggalkan dijual di pool ETH-nya dan seluruh ETH yang dihasilkan dibelanjakan di pool sisi lainnya:",[30,456,458],{"className":32,"code":457,"language":34,"meta":35,"style":35},"function swapThroughEth(\n    PoolKey calldata keyIn,\n    PoolKey calldata keyOut,\n    uint256 amountIn,\n    uint256 minAmountOut,\n    address recipient,\n    uint256 deadline\n) external returns (uint256 amountOut);\n",[25,459,460,469,480,491,499,507,515,521],{"__ignoreMap":35},[39,461,462,464,467],{"class":41,"line":42},[39,463,46],{"class":45},[39,465,466],{"class":49}," swapThroughEth",[39,468,365],{"class":53},[39,470,471,473,475,478],{"class":41,"line":90},[39,472,370],{"class":45},[39,474,373],{"class":45},[39,476,477],{"class":61}," keyIn",[39,479,379],{"class":53},[39,481,482,484,486,489],{"class":41,"line":382},[39,483,370],{"class":45},[39,485,373],{"class":45},[39,487,488],{"class":61}," keyOut",[39,490,379],{"class":53},[39,492,493,495,497],{"class":41,"line":393},[39,494,396],{"class":57},[39,496,399],{"class":61},[39,498,379],{"class":53},[39,500,501,503,505],{"class":41,"line":404},[39,502,396],{"class":57},[39,504,409],{"class":61},[39,506,379],{"class":53},[39,508,509,511,513],{"class":41,"line":414},[39,510,417],{"class":57},[39,512,420],{"class":61},[39,514,379],{"class":53},[39,516,517,519],{"class":41,"line":425},[39,518,396],{"class":57},[39,520,430],{"class":61},[39,522,523,525,527,529,531,533,535],{"class":41,"line":433},[39,524,65],{"class":53},[39,526,68],{"class":45},[39,528,75],{"class":74},[39,530,78],{"class":53},[39,532,58],{"class":57},[39,534,449],{"class":61},[39,536,87],{"class":53},[14,538,539,540,543,544,547,548,551,552,555,556,559],{},"Penjualan ke pool ETH Duel yang berhenti di harga peluncuran pool karena ETH-nya habis, dikirim lagi untuk sisanya dalam panggilan yang sama, setelah penyelarasan ulang hook membeli kembali dari pool apa yang diterima pool di antara kedua sisi: hingga ",[25,541,542],{},"SALE_PASSES()"," (8) swap, selama harga pool masih di bawah batas swap. Setiap swap membayar biaya hook atas ETH-nya sendiri, dan ",[25,545,546],{},"minAmountOut"," menghitung semuanya. V4 Quoter Uniswap memberi kuotasi untuk satu swap: melampaui apa yang dieksekusinya, ia menjawab ",[25,549,550],{},"NotEnoughLiquidity",". Aplikasi menghitung kuotasi penjualan seperti itu dengan menjalankan router sebagai trader (sebuah ",[25,553,554],{},"eth_call"," dengan state override, ",[25,557,558],{},"DuelSimulator",").",[14,561,562,563,566],{},"Apa yang tidak dapat lagi dibeli kembali oleh penyelarasan ulang diteruskan oleh ",[25,564,565],{},"sell"," melalui pool di antara kedua sisi ke pool ETH sisi lainnya, tempat penyelarasan ulang memindahkan ETH yang membayarnya:",[30,568,570],{"className":32,"code":569,"language":34,"meta":35,"style":35},"function sell(\n    PoolKey calldata keyIn,\n    PoolKey calldata keyCross,\n    PoolKey calldata keyOther,\n    uint256 amountIn,\n    uint256 minAmountOut,\n    address recipient,\n    uint256 deadline\n) external returns (uint256 amountOut);\n",[25,571,572,581,591,602,613,621,629,637,643],{"__ignoreMap":35},[39,573,574,576,579],{"class":41,"line":42},[39,575,46],{"class":45},[39,577,578],{"class":49}," sell",[39,580,365],{"class":53},[39,582,583,585,587,589],{"class":41,"line":90},[39,584,370],{"class":45},[39,586,373],{"class":45},[39,588,477],{"class":61},[39,590,379],{"class":53},[39,592,593,595,597,600],{"class":41,"line":382},[39,594,370],{"class":45},[39,596,373],{"class":45},[39,598,599],{"class":61}," keyCross",[39,601,379],{"class":53},[39,603,604,606,608,611],{"class":41,"line":393},[39,605,370],{"class":45},[39,607,373],{"class":45},[39,609,610],{"class":61}," keyOther",[39,612,379],{"class":53},[39,614,615,617,619],{"class":41,"line":404},[39,616,396],{"class":57},[39,618,399],{"class":61},[39,620,379],{"class":53},[39,622,623,625,627],{"class":41,"line":414},[39,624,396],{"class":57},[39,626,409],{"class":61},[39,628,379],{"class":53},[39,630,631,633,635],{"class":41,"line":425},[39,632,417],{"class":57},[39,634,420],{"class":61},[39,636,379],{"class":53},[39,638,639,641],{"class":41,"line":433},[39,640,396],{"class":57},[39,642,430],{"class":61},[39,644,646,648,650,652,654,656,658],{"class":41,"line":645},9,[39,647,65],{"class":53},[39,649,68],{"class":45},[39,651,75],{"class":74},[39,653,78],{"class":53},[39,655,58],{"class":57},[39,657,449],{"class":61},[39,659,87],{"class":53},[14,661,662,664,665,668,669,672,673,676,677,680,681,683,684,686,687,690,691,693,694,697,698,700],{},[25,663,565],{}," menjual ke ",[25,666,667],{},"keyIn"," seperti ",[25,670,671],{},"swapExactIn",", lalu sisanya melalui ",[25,674,675],{},"keyCross",", yang menerima semuanya (biaya peralihannya dibakar, seperti pada setiap peralihan), dan ke ",[25,678,679],{},"keyOther",", juga tahap demi tahap. ",[25,682,546],{}," menghitung ETH dari kedua pool. Apa yang juga tidak dapat dibeli kembali oleh ",[25,685,679],{}," dibayarkan kepada ",[25,688,689],{},"recipient"," dalam token pool itu, dan tidak dihitung dalam output minimum. Aplikasi menjual melalui ",[25,692,565],{}," ketika V4 Quoter menolak sebuah penjualan dan ",[25,695,696],{},"DuelSimulator.simulateSale"," menunjukkan bahwa ",[25,699,565],{}," menjual semuanya untuk ETH.",[14,702,703],{},"Router V4 lain melakukan satu swap. Hook tidak menolak penjualan dengan input pasti yang melampaui apa yang sanggup dibayar ETH di pool (biayanya dipungut setelah swap, atas ETH yang dibayarkan): penjualan itu terisi sebagian, sampai harga peluncuran pool, dan sisanya tetap pada penjual. Atur output minimum sesuai yang bisa terisi, lalu jual sisanya dalam transaksi berikutnya, ke apa yang sudah dibeli kembali oleh penyelarasan ulang.",[14,705,706,707,709,710,152,713,211,716,719,720,723],{},"Kirim ETH dengan ",[25,708,671],{}," untuk membeli. Untuk menjual atau beralih, berikan persetujuan token kepada router, atau biarkan sebuah permit (EIP-2612) menyetujuinya dalam transaksi yang sama: ",[25,711,712],{},"swapExactInWithPermit",[25,714,715],{},"swapThroughEthWithPermit",[25,717,718],{},"sellWithPermit"," menerima argumen yang sama dan permit pemanggil untuk tepat ",[25,721,722],{},"amountIn",", yang ditandatangani untuk router:",[30,725,727],{"className":32,"code":726,"language":34,"meta":35,"style":35},"struct Permit {\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n}\n",[25,728,729,740,751,761,771,780],{"__ignoreMap":35},[39,730,731,734,737],{"class":41,"line":42},[39,732,733],{"class":45},"struct",[39,735,736],{"class":57}," Permit",[39,738,739],{"class":53}," {\n",[39,741,742,744,748],{"class":41,"line":90},[39,743,396],{"class":57},[39,745,747],{"class":746},"s8w-G"," deadline",[39,749,750],{"class":53},";\n",[39,752,753,756,759],{"class":41,"line":382},[39,754,755],{"class":57},"    uint8",[39,757,758],{"class":746}," v",[39,760,750],{"class":53},[39,762,763,766,769],{"class":41,"line":393},[39,764,765],{"class":57},"    bytes32",[39,767,768],{"class":746}," r",[39,770,750],{"class":53},[39,772,773,775,778],{"class":41,"line":404},[39,774,765],{"class":57},[39,776,777],{"class":746}," s",[39,779,750],{"class":53},[39,781,782],{"class":41,"line":414},[39,783,784],{"class":53},"}\n",[14,786,787,788,791,792,795,796,799,800,802],{},"Untuk setiap token Duel, pemilik dompet menandatangani permit dalam domain EIP-712 bernama ",[25,789,790],{},"Duel",", versi ",[25,793,794],{},"1",", yang terikat pada alamat token tersebut (",[25,797,798],{},"eip712Domain()"," token itu, ERC-5267, menyatakannya). Router memakai permit lebih dulu dan mengabaikan kegagalannya: permit yang sudah dikirim siapa pun telah menetapkan allowance, dan permit yang gagal tidak mengubah apa pun; swap lalu memakai apa yang ditanggung allowance yang sudah ada dan di-revert jika tidak cukup. Setelah swap yang hanya terisi sebagian, bagian allowance yang belum dipakai tetap berlaku: tenggat permit membatasi kapan tanda tangan dapat dipakai, tetapi tidak mengakhiri allowance yang sudah diberikan. Router hanya menarik token dari pemanggil. ETH dari sebuah peralihan tetap berada di PoolManager untuk dibelanjakan pool kedua; pool Duel membelanjakan semuanya, atau swap di-revert oleh hook (",[25,801,318],{},"), dan di pool lain mana pun yang tidak dapat dibelanjakan dikembalikan kepada pemanggil.",[18,804,806],{"id":805},"meluncurkan-duel","Meluncurkan duel",[14,808,809,812,813,816,817,152,820,152,823,152,826,829,830,152,833,152,836,839,840,152,843,845,846,849,850,853,854,857,858,861,862,559],{},[25,810,811],{},"DuelFactory.createPair(CreateParams)"," meluncurkan sebuah duel; kirim biaya peluncuran dan pembelian peluncuran bersamanya, kelebihannya dikembalikan. ",[25,814,815],{},"CreateParams"," terdiri dari ",[25,818,819],{},"nameA",[25,821,822],{},"symbolA",[25,824,825],{},"nameD",[25,827,828],{},"symbolD"," (sisi B), ",[25,831,832],{},"metadataURI",[25,834,835],{},"buyA",[25,837,838],{},"buyD"," (ETH yang dibelanjakan untuk tiap sisi saat peluncuran, bebas pajak anti-snipe), ",[25,841,842],{},"supporter",[25,844,159],{}," (sesuai penomoran kategori di aplikasi, 0 untuk tanpa kategori), dan ",[25,847,848],{},"config",", yaitu ",[25,851,852],{},"configHash()"," milik factory seperti yang Anda baca: peluncuran di-revert dengan ",[25,855,856],{},"ConfigChanged"," jika ketentuannya berubah sejak saat itu. Sebuah nama memakai 1 sampai 128 byte, ticker 1 sampai 40, dan URI metadata paling banyak 4.096 (",[25,859,860],{},"InvalidMetadata","); pembelian peluncuran di atas 5% dari suplai sebuah sisi di-revert (",[25,863,864],{},"CreatorBuyTooLarge",[14,866,867,868,871,872,875,876,879,880,883],{},"Factory dimulai dengan peluncuran dijeda. Selama ",[25,869,870],{},"paused()"," bernilai true, hanya ",[25,873,874],{},"owner()"," yang dapat meluncurkan duel; panggilan pihak lain dibatalkan dengan ",[25,877,878],{},"CreationPaused",". Pemilik membuka peluncuran dengan ",[25,881,882],{},"setPaused(false)",". Duel yang sudah ada tetap diperdagangkan.",[18,885,887],{"id":886},"event","Event",[226,889,890,902],{},[229,891,892],{},[232,893,894,897,899],{},[235,895,896],{},"Kontrak",[235,898,887],{},[235,900,901],{},"Kapan",[251,903,904,917,933,945,957,969,981,993,1005,1017,1029,1041,1057,1075,1087],{},[232,905,906,909,914],{},[256,907,908],{},"DuelFactory",[256,910,911],{},[25,912,913],{},"PairCreated(pairId, creator, tokenA, tokenD)",[256,915,916],{},"Sebuah duel diluncurkan",[232,918,919,922,927],{},[256,920,921],{},"DuelHook",[256,923,924],{},[25,925,926],{},"PairRegistered(pairId, tokenA, tokenD, creator, category)",[256,928,929,930,932],{},"Pool-pool-nya didaftarkan ke hook, dalam transaksi yang sama; ",[25,931,159],{}," adalah temanya, sesuai penomoran kategori di aplikasi (0 untuk tanpa kategori)",[232,934,935,937,942],{},[256,936,921],{},[256,938,939],{},[25,940,941],{},"FeeTaken(pairId, fee, snipeTax)",[256,943,944],{},"Transaksi dengan ETH membayar biayanya",[232,946,947,949,954],{},[256,948,921],{},[256,950,951],{},[25,952,953],{},"SwitchFeeBurned(pairId, token, amount)",[256,955,956],{},"Sebuah peralihan membakar biayanya",[232,958,959,961,966],{},[256,960,921],{},[256,962,963],{},[25,964,965],{},"ArbitrageCaptured(pairId, profit)",[256,967,968],{},"Penyelarasan ulang mengisi pot",[232,970,971,973,978],{},[256,972,921],{},[256,974,975],{},[25,976,977],{},"RoundSettled(pairId, roundIndex, averageTick, winner, ethSpent, tokensBurned)",[256,979,980],{},"Sebuah ronde ditutup",[232,982,983,985,990],{},[256,984,921],{},[256,986,987],{},[25,988,989],{},"CreatorFeesClaimed(pairId, to, amount)",[256,991,992],{},"Seorang kreator dibayar",[232,994,995,997,1002],{},[256,996,908],{},[256,998,999],{},[25,1000,1001],{},"CreatorTransferStarted(pairId, creator, newCreator)",[256,1003,1004],{},"Seorang kreator menawarkan perannya (ke alamat nol: tawaran ditarik)",[232,1006,1007,1009,1014],{},[256,1008,921],{},[256,1010,1011],{},[25,1012,1013],{},"CreatorChanged(pairId, from, to)",[256,1015,1016],{},"Peran kreator sebuah duel berpindah tangan",[232,1018,1019,1021,1026],{},[256,1020,921],{},[256,1022,1023],{},[25,1024,1025],{},"CreatorFeesGivenUp(pairId, creator)",[256,1027,1028],{},"Kreator mengalihkan bagiannya dari biaya mendatang ke pot secara permanen",[232,1030,1031,1033,1038],{},[256,1032,921],{},[256,1034,1035],{},[25,1036,1037],{},"ProtocolFeesClaimed(to, amount)",[256,1039,1040],{},"Treasury dibayar",[232,1042,1043,1045,1050],{},[256,1044,921],{},[256,1046,1047],{},[25,1048,1049],{},"ProtocolRateSet(rateBps)",[256,1051,1052,1053,1056],{},"Bagian protokol dari biaya swap semua duel langsung berubah: protokol mengambil ",[25,1054,1055],{},"rateBps"," darinya (10.000 untuk seluruhnya), sisanya masuk ke pot",[232,1058,1059,1061,1072],{},[256,1060,908],{},[256,1062,1063,152,1066,152,1069],{},[25,1064,1065],{},"ConfigProposed(config, eta)",[25,1067,1068],{},"ConfigApplied(config)",[25,1070,1071],{},"ConfigCancelled()",[256,1073,1074],{},"Ketentuan peluncuran diusulkan untuk 48 jam ke depan, diterapkan, ditarik",[232,1076,1077,1079,1084],{},[256,1078,908],{},[256,1080,1081],{},[25,1082,1083],{},"PausedSet(paused)",[256,1085,1086],{},"Peluncuran dijeda atau dilanjutkan",[232,1088,1089,1092,1097],{},[256,1090,1091],{},"PoolManager",[256,1093,1094],{},[25,1095,1096],{},"Swap(id, sender, amount0, amount1, sqrtPriceX96, liquidity, tick, fee)",[256,1098,1099,1100,1103],{},"Setiap transaksi, termasuk penyelarasan ulang oleh hook sendiri (",[25,1101,1102],{},"sender","-nya adalah hook)",[14,1105,1106,1107,1110],{},"Daftar transaksi membaca swap dari ketiga pool; grafik harga dan proporsi hanya membaca kedua pool ETH. Daftar pemegang memakai event ",[25,1108,1109],{},"Transfer"," token. Subgraph mengindeks swap, saldo, pemegang, dan ronde yang sudah diselesaikan agar aplikasi dapat memuat riwayat tanpa memutar ulang chain sejak peluncuran.",[18,1112,1114],{"id":1113},"menyelesaikan-dan-mengklaim","Menyelesaikan dan mengklaim",[1116,1117,1118,1125,1135,1153],"ul",{},[1119,1120,1121,1124],"li",{},[25,1122,1123],{},"settle(pairId)"," menyelesaikan ronde yang sudah berakhir. Siapa pun dapat memanggilnya.",[1119,1126,1127,1130,1131,1134],{},[25,1128,1129],{},"claimCreatorFees(pairId)"," hanya membayar kreator duel, yaitu dompet yang meluncurkannya atau alamat yang menerima perannya; ",[25,1132,1133],{},"claimProtocolFees()"," membayar treasury yang dikonfigurasi saat klaim. Siapa pun dapat memicu kedua klaim. Treasury dapat berubah setelah masa tunggu 48 jam milik factory; pemanggil tidak dapat memilih penerima lain.",[1119,1136,1137,1140,1141,1144,1145,1148,1149,1152],{},[25,1138,1139],{},"transferCreator(pairId, newCreator)"," di factory menawarkan peran kreator sebuah duel, yang diambil oleh ",[25,1142,1143],{},"acceptCreator(pairId)"," dari ",[25,1146,1147],{},"newCreator","; ",[25,1150,1151],{},"pendingCreator(pairId)"," membaca tawarannya. Hanya kreator yang dapat menawarkannya, dan hanya alamat yang ditawari yang dapat mengambilnya.",[1119,1154,1155,1158],{},[25,1156,1157],{},"giveUpCreatorFees(pairId)"," pada hook mengirim bagian kreator dari biaya mendatang ke pot ronde secara permanen. Hanya kreator saat ini yang dapat memanggilnya. Biaya yang sudah terkumpul tetap dapat diklaim oleh kreator, dan peran kreator masih dapat dialihkan.",[1160,1161,1162],"style",{},"html pre.shiki code .s5TCs, html code.shiki .s5TCs{--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s_xSY, html code.shiki .s_xSY{--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .si6no, html code.shiki .si6no{--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s_NWU, html code.shiki .s_NWU{--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .s9nN2, html code.shiki .s9nN2{--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sTPum, html code.shiki .sTPum{--shiki-default:#1E754F;--shiki-dark:#4D9375}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s8w-G, html code.shiki .s8w-G{--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}",{"title":35,"searchDepth":90,"depth":382,"links":1164},[1165,1166,1167,1168,1169],{"id":20,"depth":90,"text":21},{"id":217,"depth":90,"text":218},{"id":805,"depth":90,"text":806},{"id":886,"depth":90,"text":887},{"id":1113,"depth":90,"text":1114},null,"Baca duel dengan DuelLens, perdagangkan pool Uniswap V4-nya lewat router V4 mana pun atau DuelRouter, ikuti event hook: panduan untuk bot dan agregator.","md",{},true,"\u002Fid\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate",{"title":5,"description":1171},"id\u002Fdocs\u002Fduel\u002Fcontracts\u002Fintegrate","iSchn4OhyfnChgxrg46IIipHCooJYj3GtMbbeqHjgxI",1791232801012]