ERC1155 입출금 가이드
ERC1155에 대한 최신 Matic.js 문서를 확인하십시오.
이 자습서는 Goerli 네트워크에 매핑된 폴리곤 테스트넷( Mumbai )을 사용하여 두 블록체인 간의 자산 전송을 보여줍니다. 이 자습서를 따라가는 동안 주목해야 할 중요한 점은 프록시 주소를 사용할 수 있을 때마다 항상 사용해야 한다는 것입니다. 예를 들어 상호 작용에는 RootChainManager 주소 대신 RootChainManagerProxy 주소를 사용해야 합니다. PoS 컨트랙트 주소, ABI, 테스트 토큰 주소 및 PoS 브리지 컨트랙트의 기타 배포 세부 정보는 여기에서 찾을 수 있습니다.
애플리케이션에 PoS 브리지를 통합하려면 자산 매핑이 필요합니다. 여기에서 매핑 요청을 제출할 수 있습니다. 그러나 이 자습서의 목적을 위해, 우리는 이미 테스트 토큰을 배포하고 PoS 브리지에 매핑했습니다. 그것은 자습서를 직접 시도하기 위해 필요할 수 있습니다. faucet에서 원하는 자산을 요청할 수 있습니다. faucet에서 테스트 토큰을 사용할 수 없는 경우 discord에서 우리 팀에게 문의하십시오.
다음 자습서에서는 몇 가지 코드 조각과 함께 모든 단계를 자세히 설명합니다. 그러나 PoS 브리지의 작동을 통합하고 이해하는 데 도움이 될 수 있는 모든 예제 소스 코드가 있는 이 리포지토리를 항상 참조할 수 있습니다.
높은 수준의 작업흐름
ERC1155 입금하기 -
- 입금해야 하는 토큰을 사용하기 위해 ERC1155Predicate 컨트랙트를 승인 합니다.
- RootChainManager에서 depositFor를 호출합니다.
ERC1155 출금하기 -
- 폴리곤 체인에서 토큰을 소각합니다.
- RootChainManager에서 exit 함수를 호출하여 소각 트랜잭션의 증명을 제출하십시오. 이 호출은 소각 트랜잭션이 포함된 블록에 대한 체크포인트가 제출된 후에 만들 수 있습니다.
단계 세부정보
모두 승인하기
이는 ERC1155Predicate
가 transferFrom
함수를 호출할 수 있도록 하는 정상적인 ERC1155 승인입니다. 폴리곤 POSClient
는 이 호출을 수행하기 위해 approveERC1155ForDeposit
메서드를 노출합니다.
const erc1155RootToken = posClient.erc1155(<root token address>,true);
const approveResult = await erc1155RootToken.approveAll();
const txHash = await approveResult.getTransactionHash();
const txReceipt = await approveResult.getReceipt();
입금하기
Deposit 메소드는 RootChainManager
컨트랙트에서 depositFor
를 호출하여 수행할 수 있습니다. 토큰은 사전에 매핑되고 전송 승인을 받아야 합니다. 토큰이 전송되면 StateSync 메커니즘을 사용하여 입금이 진행됩니다. 폴리곤 POSClient
는 이 호출을 수행하기 위해 depositSingleERC1155ForUser
& depositBatchERC1155ForUser
메소드를 노출합니다.
const erc1155RootToken = posClient.erc1155(<root token address>, true);
const result = await erc1155RootToken.deposit({
amount: 1,
tokenId: '123',
userAddress: <from address>,
data: '0x5465737445524331313535', // data is optional
});
const txHash = await result.getTransactionHash();
const txReceipt = await result.getReceipt();
ChildToken
의 deposit
함수는 ChildChainManager
에 의해 호출됩니다. 이 호출이 이루어질 때 토큰을 발행해야 합니다.
참고: 이더리움에서 폴리곤으로의 입금은 상태 동기화 메커니즘을 사용하여 발생하며 약 5-7분 정도 걸립니다. 이 시간 간격을 두고 기다린 후 web3.js/matic.js 라이브러리나 메타마스크를 이용하여 잔고를 확인하는 것을 권장합니다. 탐색기는 하위 체인에서 하나 이상의 자산 전송이 발생한 경우에만 잔고를 표시합니다. 이 링크는 입금 이벤트를 추적하는 방법을 설명합니다.
소각하기
사용자는 ChildToken
컨트랙트의 withdraw
함수를 호출할 수 있습니다. 이 함수는 토큰을 소각할 것입니다. 폴리곤 POSClient
는 이 호출을 수행하기 위해 burnSingleERC1155
& burnBatchERC1155
메소드를 노출합니다.
const erc1155Token = posClient.erc1155(<child token address>);
const result = await erc1155Token.withdrawStart(<token id>,<amount>);
const txHash = await result.getTransactionHash();
const txReceipt = await result.getReceipt();
이 호출에 대한 트랜잭션 해시를 저장하고 소각 증명을 생성하는 동안 사용합니다.
종료하기
WithdrawExit 메소드 소각 트랜잭션이 포함된 블록에 대한 checkpoint
가 제출되면, 사용자는 RootChainManager
컨트랙트의 exit
함수를 호출하고 소각 증명을 제출해야 합니다. 유효한 증명 토큰을 제출하면 사용자에게 전송됩니다. 폴리곤POS 클라이언트는 이 호출을 수행하기 위해 exitBatchERC1155
및exitSingleERC1155
메소드를 노출합니다. 이 함수는 체크포인트가 메인 체인에 포함된 후에만 호출할 수 있습니다. 이 가이드에 따라 체크포인트 포함을 추적할 수 있습니다.
const erc1155RootToken = posClient.erc1155(<root token address>, true);
const result = await erc1155RootToken.withdrawExit(<burn tx hash>);
const txHash = await result.getTransactionHash();
const txReceipt = await result.getReceipt();