-
-
Save pjt3591oo/d9a1a293b00f2bb1e3e4a45707c9828d to your computer and use it in GitHub Desktop.
deposit-bridge log
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { l1Provider } from "./common/messenger"; | |
// withdraw message for prove withdraw | |
// withdraw message for finalize withdraw | |
async function main(tx: string) { | |
// L1: L1StandardBridge.deposiERC20To => L1CrossDomainMessenger.sendMessage => OptimismPortal.depositERC20Tranaction | |
// L2: L2CrossDomainMessenger.relayMessage => L2StandardBridge.finalizeBridgeERC20 | |
/* | |
* 이벤트 호출 순서 | |
{ | |
transactionIndex: 0, | |
blockNumber: 40795, | |
transactionHash: '0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561', | |
address: '0x2910E325cf29dd912E3476B61ef12F49cb931096', // ERC20: OptmismPortal은 safeTransferFrom을 이용하여 승인된 수량만큼 토큰을 가져온다. | |
topics: [ | |
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', // event signature: Transfer (index_topic_1 address from, index_topic_2 address to, uint256 value) | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33', // index_topic_1 address from | |
'0x000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b090' // index_topic_2 address to | |
], | |
data: '0x0000000000000000000000000000000000000000000000008ac7230489e80000', | |
logIndex: 0, | |
blockHash: '0x1209bc83e0217b28d1c40cdae64b10c812094c527aee22f2b501fe19c335bcf3' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 40795, | |
transactionHash: '0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561', | |
address: '0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', // L1StandardBridgeProxy | |
topics: [ | |
'0x718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d0396', | |
'0x0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb931096', | |
'0x000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 1, | |
blockHash: '0x1209bc83e0217b28d1c40cdae64b10c812094c527aee22f2b501fe19c335bcf3' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 40795, | |
transactionHash: '0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561', | |
address: '0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', // L1StandardBridgeProxy | |
topics: [ | |
'0x7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf', | |
'0x0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb931096', | |
'0x000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 2, | |
blockHash: '0x1209bc83e0217b28d1c40cdae64b10c812094c527aee22f2b501fe19c335bcf3' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 40795, | |
transactionHash: '0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561', | |
address: '0x6509f2a854BA7441039fCE3b959d5bAdd2fFCFCD', // OptimismPortalProxy | |
topics: [ | |
'0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32', | |
'0x000000000000000000000000e898a42ee3ac477c46dd6c912e7af795d44464e6', | |
'0x0000000000000000000000004200000000000000000000000000000000000007', | |
'0x0000000000000000000000000000000000000000000000000000000000000000' | |
], | |
data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000024d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004698800d764ad0b0001000000000000000000000000000000000000000000000000000000000019000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b09000000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001040166a07a000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb93109600000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 3, | |
blockHash: '0x1209bc83e0217b28d1c40cdae64b10c812094c527aee22f2b501fe19c335bcf3' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 40795, | |
transactionHash: '0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561', | |
address: '0xd787A42Ee3ac477c46Dd6C912e7af795D44453d5', // L1CrossDomainMessengerProxy | |
topics: [ | |
'0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a', | |
'0x0000000000000000000000004200000000000000000000000000000000000010' | |
], | |
data: '0x000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b09000000000000000000000000000000000000000000000000000000000000000800001000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040166a07a000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb93109600000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 4, | |
blockHash: '0x1209bc83e0217b28d1c40cdae64b10c812094c527aee22f2b501fe19c335bcf3' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 40795, | |
transactionHash: '0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561', | |
address: '0xd787A42Ee3ac477c46Dd6C912e7af795D44453d5', // L1CrossDomainMessengerProxy | |
topics: [ | |
'0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546', | |
'0x000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b090' | |
], | |
data: '0x0000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 5, | |
blockHash: '0x1209bc83e0217b28d1c40cdae64b10c812094c527aee22f2b501fe19c335bcf3' | |
} | |
*/ | |
const { logs } = await l1Provider.getTransactionReceipt(tx); | |
for (const log of logs) { | |
console.log(log); | |
} | |
} | |
main('0x0efce44826e8ac4868f33f78583252c04ca8ef24d9d02abb1bf44a23872f6561'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { ethers } from "ethers"; | |
import { getMessenger, l1Provider, l2Provider } from "./common/messenger"; | |
import { TEST_EOAS } from "./common/eoa"; | |
// withdraw message for prove withdraw | |
// withdraw message for finalize withdraw | |
async function main(tx: string) { | |
const from = TEST_EOAS[0]; | |
const l1Wallet = new ethers.Wallet(from.privateKey, l1Provider); | |
const l2Wallet = new ethers.Wallet(from.privateKey, l2Provider); | |
const messenger = getMessenger(l1Wallet, l2Wallet); | |
/* | |
* deposit 호출 흐름 | |
* L1: L1StandardBridge.deposiERC20To => L1CrossDomainMessenger.sendMessage => OptimismPortal.depositERC20Tranaction | |
* L2: L2CrossDomainMessenger.relayMessage => L2StandardBridge.finalizeBridgeERC20 | |
L1에서 L2로 메시지를 보내기 위해 L1CrossDomainMessenger.sendMessage를 호출한다. | |
op-node는 sendMessage 이벤트를 감지하여 L2CrossDomainMessenger.relayMessage를 호출하는 tx를 생성한다. | |
*/ | |
/* | |
op-node는 L1에서 L2로 메시지를 보내기 위해 L1CrossDomainMessenger.sendMessage를 호출한다. | |
sendMessage 이벤트를 통해 L2CrossDomainMessenger.relayMessage를 호출하는 tx를 생성한다. | |
data는 replayMessage를 호출하기 위한 데이터이다. | |
{ | |
hash: '0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa', | |
type: 126, | |
accessList: null, | |
blockHash: '0xd58a652ec7b60ebfb9418d45fc2b11a5a94ee3238440360d46ef72281e2d879a', | |
blockNumber: 176415, | |
transactionIndex: 1, | |
confirmations: 44, | |
from: '0xE898A42eE3AC477c46dd6C912E7aF795d44464E6', | |
gasPrice: BigNumber { _hex: '0x00', _isBigNumber: true }, | |
gasLimit: BigNumber { _hex: '0x046988', _isBigNumber: true }, | |
to: '0x4200000000000000000000000000000000000007', // // L2CrossDomainMessengerProxy | |
value: BigNumber { _hex: '0x00', _isBigNumber: true }, | |
nonce: 27, | |
data: '0xd764ad0b000100000000000000000000000000000000000000000000000000000000001b000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b09000000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001040166a07a000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb93109600000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | |
r: '0x0000000000000000000000000000000000000000000000000000000000000000', | |
s: '0x0000000000000000000000000000000000000000000000000000000000000000', | |
v: 0, | |
creates: null, | |
chainId: 0, | |
wait: [Function (anonymous)] | |
} | |
*/ | |
const l2Tx = await l2Provider.getTransaction(tx); | |
console.log('L1의 브릿지 이벤틀르 감지하여 파생된 L2 트랜잭션 정보'); | |
console.log(l2Tx); | |
console.log('\n\n'); | |
/* | |
relayMessage를 호출할 때 전달되는 인자 | |
[ | |
BigNumber { | |
_hex: '0x0100000000000000000000000000000000000000000000000000000000001b', | |
_isBigNumber: true | |
}, | |
'0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', | |
'0x4200000000000000000000000000000000000010', | |
BigNumber { _hex: '0x00', _isBigNumber: true }, | |
BigNumber { _hex: '0x00', _isBigNumber: true }, | |
'0x0166a07a000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb93109600000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
_nonce: BigNumber { | |
_hex: '0x0100000000000000000000000000000000000000000000000000000000001b', | |
_isBigNumber: true | |
}, | |
_sender: '0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', | |
_target: '0x4200000000000000000000000000000000000010', // L2StandardBridge: L2CrossDomainMessenger.relayMessage를 호출하면 _target에 해당하는 컨트랙트를 호출한다. | |
_value: BigNumber { _hex: '0x00', _isBigNumber: true }, | |
_minGasLimit: BigNumber { _hex: '0x00', _isBigNumber: true }, | |
_message: '0x0166a07a000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb93109600000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e8000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000' | |
] | |
*/ | |
// // relayMessage를 호출할 때 전달되는 인자를 decode하여 출력 | |
const decodeParseRelayMessage = messenger.contracts.l2.L2CrossDomainMessenger.interface.decodeFunctionData( | |
'relayMessage', | |
l2Tx.data | |
) | |
console.log('L2CrossDomainMessenger.relayMessage를 호출할 때 전달되는 인자정보') | |
console.log(decodeParseRelayMessage); | |
console.log('\n\n'); | |
/* | |
[ | |
'0x915B110e8cD64B91E67278965627E3baee9B53fe', | |
'0x2910E325cf29dd912E3476B61ef12F49cb931096', | |
'0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
'0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
BigNumber { _hex: '0x8ac7230489e80000', _isBigNumber: true }, | |
'0x0000000000000000000000000000000000000000000000000000000000000000', | |
_localToken: '0x915B110e8cD64B91E67278965627E3baee9B53fe', | |
_remoteToken: '0x2910E325cf29dd912E3476B61ef12F49cb931096', | |
_from: '0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
_to: '0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
_amount: BigNumber { _hex: '0x8ac7230489e80000', _isBigNumber: true }, | |
_extraData: '0x0000000000000000000000000000000000000000000000000000000000000000' | |
] | |
*/ | |
const decodeParseL2StandardBridgeFinalizeBridgeERC20 = messenger.contracts.l2.L2StandardBridge.interface.decodeFunctionData( | |
'finalizeBridgeERC20', | |
decodeParseRelayMessage._message | |
) | |
console.log('L2StandardBridge.finalizeBridgeERC20를 호출할 때 전달되는 인자정보') | |
console.log(decodeParseL2StandardBridgeFinalizeBridgeERC20); | |
console.log('\n\n'); | |
/* | |
// L2 토큰이 mint된다(이벤트는 transfer -> mint 순서로 발생) | |
{ | |
transactionIndex: 1, | |
blockNumber: 176415, | |
transactionHash: '0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa', | |
address: '0x915B110e8cD64B91E67278965627E3baee9B53fe', // ERC20 | |
topics: [ | |
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', // transfer | |
'0x0000000000000000000000000000000000000000000000000000000000000000', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x0000000000000000000000000000000000000000000000008ac7230489e80000', | |
logIndex: 0, | |
blockHash: '0xd58a652ec7b60ebfb9418d45fc2b11a5a94ee3238440360d46ef72281e2d879a' | |
} | |
{ | |
transactionIndex: 1, | |
blockNumber: 176415, | |
transactionHash: '0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa', | |
address: '0x915B110e8cD64B91E67278965627E3baee9B53fe', // ERC20 | |
topics: [ | |
'0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885', // mint | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x0000000000000000000000000000000000000000000000008ac7230489e80000', | |
logIndex: 1, | |
blockHash: '0xd58a652ec7b60ebfb9418d45fc2b11a5a94ee3238440360d46ef72281e2d879a' | |
} | |
{ | |
transactionIndex: 1, | |
blockNumber: 176415, | |
transactionHash: '0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa', | |
address: '0x4200000000000000000000000000000000000010', // L2StandardBridge | |
topics: [ | |
'0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89', | |
'0x0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb931096', | |
'0x000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 2, | |
blockHash: '0xd58a652ec7b60ebfb9418d45fc2b11a5a94ee3238440360d46ef72281e2d879a' | |
} | |
{ | |
transactionIndex: 1, | |
blockNumber: 176415, | |
transactionHash: '0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa', | |
address: '0x4200000000000000000000000000000000000010', // L2StandardBridge | |
topics: [ | |
'0xd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd', | |
'0x000000000000000000000000915b110e8cd64b91e67278965627e3baee9b53fe', | |
'0x0000000000000000000000002910e325cf29dd912e3476b61ef12f49cb931096', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 3, | |
blockHash: '0xd58a652ec7b60ebfb9418d45fc2b11a5a94ee3238440360d46ef72281e2d879a' | |
} | |
{ | |
transactionIndex: 1, | |
blockNumber: 176415, | |
transactionHash: '0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa', | |
address: '0x4200000000000000000000000000000000000007', // L2CrossDomainMessengerProxy | |
topics: [ | |
'0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c', | |
'0x1d37d78b46bab40717367e57b093035b5748e6ea7c79b80b387a75fc824cedd2' | |
], | |
data: '0x', | |
logIndex: 4, | |
blockHash: '0xd58a652ec7b60ebfb9418d45fc2b11a5a94ee3238440360d46ef72281e2d879a' | |
} | |
*/ | |
const { logs } = await l2Provider.getTransactionReceipt(tx); | |
console.log('ETH Bridge 이벤트 로그정보') | |
for (const log of logs) { | |
console.log(log); | |
} | |
} | |
main('0xf382dfb8157ed6b82c1553ffbc87774368bed3488afdc534b4bb920093f911aa'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { l1Provider } from "./common/messenger"; | |
async function main(tx: string) { | |
/** | |
* 호출 흐름 | |
* L1: L1StandardBridge.depositETHTo => L1CrossDomainMessenger.sendMessage => OptimismPortal.depositTranaction | |
* L2: L2CrossDomainMessenger.relayMessage => L2StandardBridge.finalizeBridgeETH | |
*/ | |
/* | |
* 이벤트 호출 순서 | |
{ | |
transactionIndex: 0, | |
blockNumber: 38529, | |
transactionHash: '0xb6c350a4ae901c12e3edc7a4b171bc7a5cd500990cd2779891bd19c53a8f5e6b', | |
address: '0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', // L1StandardBridgeProxy | |
topics: [ | |
'0x35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23', // event sigranure: ETHDepositInitiated (index_topic_1 address from, index_topic_2 address to, uint256 amount, bytes extraData) | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33', // index_topic_1 address from | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' // index_topic_2 address to | |
], | |
data: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 0, | |
blockHash: '0xe667703903fd3d38c637e1645a8156a7fbcc89ab8b1645861c8cc5040e67238b' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 38529, | |
transactionHash: '0xb6c350a4ae901c12e3edc7a4b171bc7a5cd500990cd2779891bd19c53a8f5e6b', | |
address: '0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', // L1StandardBridgeProxy | |
topics: [ | |
'0x2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5', // event sigranure: ETHBridgeInitiated (index_topic_1 address from, index_topic_2 address to, uint256 amount, bytes extraData) | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33', // index_topic_1 address from | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' // index_topic_2 address to | |
], | |
data: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 1, | |
blockHash: '0xe667703903fd3d38c637e1645a8156a7fbcc89ab8b1645861c8cc5040e67238b' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 38529, | |
transactionHash: '0xb6c350a4ae901c12e3edc7a4b171bc7a5cd500990cd2779891bd19c53a8f5e6b', | |
address: '0x6509f2a854BA7441039fCE3b959d5bAdd2fFCFCD', // OptimismPortalProxy | |
topics: [ | |
'0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32', // event sigranure: TransactionDeposited (index_topic_1 address from, index_topic_2 address to, index_topic_3 uint256 version, bytes opaqueData) | |
'0x000000000000000000000000e898a42ee3ac477c46dd6c912e7af795d44464e6', // index_topic_1 address from | |
'0x0000000000000000000000004200000000000000000000000000000000000007', // index_topic_2 address to | |
'0x0000000000000000000000000000000000000000000000000000000000000000' // index_topic_3 uint256 version | |
], | |
data: '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000020d0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000de0b6b3a7640000000000000004658800d764ad0b0001000000000000000000000000000000000000000000000000000000000017000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b09000000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c41635f5fd00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 2, | |
blockHash: '0xe667703903fd3d38c637e1645a8156a7fbcc89ab8b1645861c8cc5040e67238b' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 38529, | |
transactionHash: '0xb6c350a4ae901c12e3edc7a4b171bc7a5cd500990cd2779891bd19c53a8f5e6b', | |
address: '0xd787A42Ee3ac477c46Dd6C912e7af795D44453d5', // L1CrossDomainMessengerProxy | |
topics: [ | |
'0xcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a', // event sigranure: SentMessage (index_topic_1 address target, address sender, bytes message, uint256 messageNonce, uint256 gasLimit) | |
'0x0000000000000000000000004200000000000000000000000000000000000010' // index_topic_1 address target | |
], | |
data: '0x000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b09000000000000000000000000000000000000000000000000000000000000000800001000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c41635f5fd00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 3, | |
blockHash: '0xe667703903fd3d38c637e1645a8156a7fbcc89ab8b1645861c8cc5040e67238b' | |
} | |
{ | |
transactionIndex: 0, | |
blockNumber: 38529, | |
transactionHash: '0xb6c350a4ae901c12e3edc7a4b171bc7a5cd500990cd2779891bd19c53a8f5e6b', | |
address: '0xd787A42Ee3ac477c46Dd6C912e7af795D44453d5', // L1CrossDomainMessengerProxy | |
topics: [ | |
'0x8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d546', // event sigranure: SentMessageExtension1 (index_topic_1 address sender, uint256 value) | |
'0x000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b090' // index_topic_1 address sender | |
], | |
data: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000', | |
logIndex: 4, | |
blockHash: '0xe667703903fd3d38c637e1645a8156a7fbcc89ab8b1645861c8cc5040e67238b' | |
} | |
*/ | |
const { logs } = await l1Provider.getTransactionReceipt(tx); | |
for (const log of logs) { | |
console.log(log); | |
} | |
} | |
main('0xb6c350a4ae901c12e3edc7a4b171bc7a5cd500990cd2779891bd19c53a8f5e6b'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require('dotenv').config(); | |
import { ethers } from "ethers"; | |
import { getMessenger, l1Provider, l2Provider } from "./common/messenger"; | |
import { TEST_EOAS } from "./common/eoa"; | |
async function main(tx: string) { | |
const from = TEST_EOAS[0]; | |
const l1Wallet = new ethers.Wallet(from.privateKey, l1Provider); | |
const l2Wallet = new ethers.Wallet(from.privateKey, l2Provider); | |
const messenger = getMessenger(l1Wallet, l2Wallet); | |
/** | |
* deposit 호출 흐름 | |
* L1: L1StandardBridge.depositETHTo => L1CrossDomainMessenger.sendMessage => OptimismPortal.depositTranaction | |
* L2: L2CrossDomainMessenger.relayMessage => L2StandardBridge.finalizeBridgeETH | |
L1에서 L2로 메시지를 보내기 위해 L1CrossDomainMessenger.sendMessage를 호출한다. | |
op-node는 sendMessage 이벤트를 감지하여 L2CrossDomainMessenger.relayMessage를 호출하는 tx를 생성한다. | |
*/ | |
/* | |
op-node는 L1에서 L2로 메시지를 보내기 위해 L1CrossDomainMessenger.sendMessage를 호출한다. | |
sendMessage 이벤트를 통해 L2CrossDomainMessenger.relayMessage를 호출하는 tx를 생성한다. | |
data는 replayMessage를 호출하기 위한 데이터이다. | |
{ | |
hash: '0xc0b451761314611a2473866ce21f5ea1710ace624d3f55281485ed64c23de8a2', | |
type: 126, | |
accessList: null, | |
blockHash: '0x95d7065e02e93e52376c85280a33e198e1e8e22feaacbde842498ef36ec3c1d2', | |
blockNumber: 173769, | |
transactionIndex: 1, | |
confirmations: 485, | |
from: '0xE898A42eE3AC477c46dd6C912E7aF795d44464E6', | |
gasPrice: BigNumber { _hex: '0x00', _isBigNumber: true }, | |
gasLimit: BigNumber { _hex: '0x046588', _isBigNumber: true }, | |
to: '0x4200000000000000000000000000000000000007', // L2CrossDomainMessengerProxy | |
value: BigNumber { _hex: '0x0de0b6b3a7640000', _isBigNumber: true }, | |
nonce: 24, | |
data: '0xd764ad0b0001000000000000000000000000000000000000000000000000000000000018000000000000000000000000fe36e31dfe8cb3a3aa0cb9f35b191ddb5451b09000000000000000000000000042000000000000000000000000000000000000100000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c41635f5fd00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | |
r: '0x0000000000000000000000000000000000000000000000000000000000000000', | |
s: '0x0000000000000000000000000000000000000000000000000000000000000000', | |
v: 0, | |
creates: null, | |
chainId: 0, | |
wait: [Function (anonymous)] | |
} | |
*/ | |
const l2Tx = await l2Provider.getTransaction(tx); | |
console.log('L1의 브릿지 이벤틀르 감지하여 파생된 L2 트랜잭션 정보'); | |
console.log(l2Tx); | |
console.log('\n\n'); | |
/** | |
[ | |
BigNumber { | |
_hex: '0x01000000000000000000000000000000000000000000000000000000000018', | |
_isBigNumber: true | |
}, | |
'0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', | |
'0x4200000000000000000000000000000000000010', | |
BigNumber { _hex: '0x0de0b6b3a7640000', _isBigNumber: true }, | |
BigNumber { _hex: '0x00', _isBigNumber: true }, | |
'0x1635f5fd00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
_nonce: BigNumber { | |
_hex: '0x01000000000000000000000000000000000000000000000000000000000018', | |
_isBigNumber: true | |
}, | |
_sender: '0xfe36E31dFE8Cb3A3Aa0CB9f35B191DdB5451b090', | |
_target: '0x4200000000000000000000000000000000000010', // L2StandardBridge: L2CrossDomainMessenger.relayMessage를 호출하면 _target에 해당하는 컨트랙트를 호출한다. | |
_value: BigNumber { _hex: '0x0de0b6b3a7640000', _isBigNumber: true }, | |
_minGasLimit: BigNumber { _hex: '0x00', _isBigNumber: true }, | |
_message: '0x1635f5fd00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b3300000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000' | |
] | |
*/ | |
// relayMessage를 호출할 때 전달되는 인자를 decode하여 출력 | |
const decodeParseRelayMessage = messenger.contracts.l2.L2CrossDomainMessenger.interface.decodeFunctionData( | |
'relayMessage', | |
l2Tx.data | |
) | |
console.log('relayMessage를 호출할 때 전달되는 인자정보') | |
console.log(decodeParseRelayMessage); | |
console.log('\n\n'); | |
/* | |
[ | |
'0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
'0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
BigNumber { _hex: '0x0de0b6b3a7640000', _isBigNumber: true }, | |
'0x0000000000000000000000000000000000000000000000000000000000000000', | |
_from: '0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
_to: '0x30556546d4b398C3b0F67f0e1586feAf11CE9b33', | |
_amount: BigNumber { _hex: '0x0de0b6b3a7640000', _isBigNumber: true }, | |
_extraData: '0x0000000000000000000000000000000000000000000000000000000000000000' | |
] | |
*/ | |
const decodeParseL2StandardBridgeFinalizeBridgeETH = messenger.contracts.l2.L2StandardBridge.interface.decodeFunctionData( | |
'finalizeBridgeETH', | |
decodeParseRelayMessage._message | |
) | |
console.log('L2StandardBridge.finalizeBridgeETH를 호출할 때 전달되는 인자정보') | |
console.log(decodeParseL2StandardBridgeFinalizeBridgeETH); | |
console.log('\n\n'); | |
/* | |
{ | |
transactionIndex: 1, | |
blockNumber: 173769, | |
transactionHash: '0xc0b451761314611a2473866ce21f5ea1710ace624d3f55281485ed64c23de8a2', | |
address: '0x4200000000000000000000000000000000000010', // L2StandardBridge | |
topics: [ | |
'0xb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89', | |
'0x0000000000000000000000000000000000000000000000000000000000000000', | |
'0x000000000000000000000000deaddeaddeaddeaddeaddeaddeaddeaddead0000', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b330000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 0, | |
blockHash: '0x95d7065e02e93e52376c85280a33e198e1e8e22feaacbde842498ef36ec3c1d2' | |
} | |
{ | |
transactionIndex: 1, | |
blockNumber: 173769, | |
transactionHash: '0xc0b451761314611a2473866ce21f5ea1710ace624d3f55281485ed64c23de8a2', | |
address: '0x4200000000000000000000000000000000000010', // L2StandardBridge | |
topics: [ | |
'0x31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33', | |
'0x00000000000000000000000030556546d4b398c3b0f67f0e1586feaf11ce9b33' | |
], | |
data: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000', | |
logIndex: 1, | |
blockHash: '0x95d7065e02e93e52376c85280a33e198e1e8e22feaacbde842498ef36ec3c1d2' | |
} | |
{ | |
transactionIndex: 1, | |
blockNumber: 173769, | |
transactionHash: '0xc0b451761314611a2473866ce21f5ea1710ace624d3f55281485ed64c23de8a2', | |
address: '0x4200000000000000000000000000000000000007', // L2CrossDomainMessengerProxy | |
topics: [ | |
'0x4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c', | |
'0xa7a2e7a086cb5f2448cbdb134e0bb37dd00bc82bf116375356928472ac3653fe' | |
], | |
data: '0x', | |
logIndex: 2, | |
blockHash: '0x95d7065e02e93e52376c85280a33e198e1e8e22feaacbde842498ef36ec3c1d2' | |
} | |
*/ | |
const { logs } = await l2Provider.getTransactionReceipt(tx); | |
console.log('ETH Bridge 이벤트 로그정보') | |
for (const log of logs) { | |
console.log(log); | |
} | |
} | |
main('0xc0b451761314611a2473866ce21f5ea1710ace624d3f55281485ed64c23de8a2'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment