testnet
GitHub EN

IOkrw.mint

mint(address recipient, uint256 amount) external returns (bool)

amount로 지정된 수량의 OKRW 토큰을 발행하여 recipient 주소로 입금합니다. 이 함수는 x/okrw 모듈 파라미터에서 체인 수준으로 설정된 공인된 발행자 주소만이 성공적으로 호출할 수 있습니다. 다른 주소에서의 호출은 사용자 정의 오류와 함께 되돌려집니다.

파라미터

이름 타입 필수 설명
recipient address 새로 발행된 OKRW를 받을 주소입니다. 0 주소일 수 없습니다.
amount uint256 발행할 OKRW의 양으로, 가장 작은 단위(wei, 10^18)로 표시됩니다. 0보다 커야 합니다.

반환값

타입: bool

성공적으로 실행되면 true를 반환합니다. 실패 시 false를 반환하는 대신 함수가 되돌려집니다.

에러

코드 이름 설명
UnauthorizedMinter 호출의 `msg.sender`가 공인된 발행자가 아닐 경우 되돌려집니다. `caller`와 `authorizedMinter` 주소를 반환합니다.
InvalidAddress 제공된 `recipient` 주소가 유효하지 않거나(예: 0 주소) `caller` 주소를 Cosmos 주소로 변환할 수 없는 경우 되돌려집니다. 유효하지 않은 `addr`을 반환합니다.
InvalidAmount `amount`가 0일 경우 되돌려집니다. 참고: 현재 구현은 이 경우 일반적인 revert 사유를 반환합니다.

예제

컨트랙트에서 기본 발행

이 예제는 `mint` 함수를 호출하는 컨트랙트를 보여줍니다. 이 호출이 성공하려면 `MinterContract`의 주소 자체가 `x/okrw` 모듈 파라미터에서 공인된 발행자로 설정되어야 합니다.

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.18;

import "./IOkrw.sol";

contract MinterContract {
    address constant OKRW_PRECOMPILE = 0x1000000000000000000000000000000000000001;
    IOkrw okrw = IOkrw(OKRW_PRECOMPILE);

    // This function will only succeed if this contract's address
    // is the authorized minter on the Maroo network.
    function mintOkrw(address to, uint256 amount) external {
        bool success = okrw.mint(to, amount);
        require(success, "OKRW minting failed");
    }
}

Solidity에서 사용자 정의 오류 처리

이 예제는 `try/catch` 블록을 사용하여 프리컴파일에서 발생할 수 있는 `UnauthorizedMinter` 오류를 정상적으로 처리하는 방법을 보여줍니다. 이를 통해 컨트랙트는 전체가 되돌려지는 대신 실패에 반응할 수 있습니다.

// ...
function safeMintOkrw(address to, uint256 amount) external {
    try okrw.mint(to, amount) returns (bool success) {
        require(success, "Mint returned false");
        // Emit a local event or perform other logic
    } catch (bytes memory lowLevelData) {
        // Catch custom errors
        if (lowLevelData.length == 68 && lowLevelData[0:4] == IOkrw.UnauthorizedMinter.selector) {
            (address caller, address authorizedMinter) = abi.decode(lowLevelData[4:], (address, address));
            // Handle unauthorized error, e.g., emit an event
            revert("Unauthorized minter caught");
        } else {
            revert("Unknown custom error");
        }
    }
}

Ethers.js로 호출 및 오류 처리

이 클라이언트 측 예제는 `mint` 함수를 호출하고 트랜잭션이 되돌려질 경우 사용자 정의 오류 데이터를 파싱하는 방법을 보여줍니다. 이는 dApp 인터페이스에서 사용자에게 명확한 피드백을 제공하는 데 유용합니다.

const { ethers } = require("ethers");

const okrwPrecompileAddress = "0x1000000000000000000000000000000000000001";
const okrwAbi = [
    "function mint(address recipient, uint256 amount) external returns (bool)",
    "error UnauthorizedMinter(address caller, address authorizedMinter)"
];

// Assume 'unauthorizedSigner' is an ethers.Signer for an account that is NOT the minter
const okrwContract = new ethers.Contract(okrwPrecompileAddress, okrwAbi, unauthorizedSigner);

async function attemptMint(recipient, amount) {
    try {
        const tx = await okrwContract.mint(recipient, ethers.parseEther(amount));
        await tx.wait();
        console.log("Minting successful!");
    } catch (error) {
        if (error.data) {
            const decodedError = okrwContract.interface.parseError(error.data);
            console.error(`Minting failed with error: ${decodedError.name}`);
            console.error(`Args: ${decodedError.args}`);
        } else {
            console.error("An unknown error occurred:", error.message);
        }
    }
}

attemptMint("0xRecipientAddress...", "1000");
ESC
검색어를 입력하세요