본문으로 건너뛰기

ERC1155 입출금 가이드

ERC1155에 대한 최신 Matic.js 문서를 확인하십시오.

이 자습서는 Goerli 네트워크에 매핑된 폴리곤 테스트넷( Mumbai )을 사용하여 두 블록체인 간의 자산 전송을 보여줍니다. 이 자습서를 따라가는 동안 주목해야 할 중요한 점은 프록시 주소를 사용할 수 있을 때마다 항상 사용해야 한다는 것입니다. 예를 들어 상호 작용에는 RootChainManager 주소 대신 RootChainManagerProxy 주소를 사용해야 합니다. PoS 컨트랙트 주소, ABI, 테스트 토큰 주소 및 PoS 브리지 컨트랙트의 기타 배포 세부 정보는 여기에서 찾을 수 있습니다.

애플리케이션에 PoS 브리지를 통합하려면 자산 매핑이 필요합니다. 여기에서 매핑 요청을 제출할 수 있습니다. 그러나 이 자습서의 목적을 위해, 우리는 이미 테스트 토큰을 배포하고 PoS 브리지에 매핑했습니다. 그것은 자습서를 직접 시도하기 위해 필요할 수 있습니다. faucet에서 원하는 자산을 요청할 수 있습니다. faucet에서 테스트 토큰을 사용할 수 없는 경우 discord에서 우리 팀에게 문의하십시오.

다음 자습서에서는 몇 가지 코드 조각과 함께 모든 단계를 자세히 설명합니다. 그러나 PoS 브리지의 작동을 통합하고 이해하는 데 도움이 될 수 있는 모든 예제 소스 코드가 있는 이 리포지토리를 항상 참조할 수 있습니다.

높은 수준의 작업흐름

ERC1155 입금하기 -

  1. 입금해야 하는 토큰을 사용하기 위해 ERC1155Predicate 컨트랙트를 승인 합니다.
  2. RootChainManager에서 depositFor를 호출합니다.

ERC1155 출금하기 -

  1. 폴리곤 체인에서 토큰을 소각합니다.
  2. RootChainManager에서 exit 함수를 호출하여 소각 트랜잭션의 증명을 제출하십시오. 이 호출은 소각 트랜잭션이 포함된 블록에 대한 체크포인트가 제출된 후에 만들 수 있습니다.

단계 세부정보


모두 승인하기

approveAll 메소드

이는 ERC1155PredicatetransferFrom 함수를 호출할 수 있도록 하는 정상적인 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();

ChildTokendeposit 함수는 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 클라이언트는 이 호출을 수행하기 위해 exitBatchERC1155exitSingleERC1155 메소드를 노출합니다. 이 함수는 체크포인트가 메인 체인에 포함된 후에만 호출할 수 있습니다. 이 가이드에 따라 체크포인트 포함을 추적할 수 있습니다.

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();