contract2object

스마트 계약의 ABI와 UPPERCASE의 OOP 기능을 이용하여 스마트 계약을 JavaScript 객체로 만들어 줍니다.

Usage no npm install needed!

<script type="module">
  import contract2object from 'https://cdn.skypack.dev/contract2object';
</script>

README

Contract2Object

스마트 계약의 ABI와 UPPERCASE의 OOP 기능을 이용하여 스마트 계약을 JavaScript 객체로 만들어 줍니다.

License: MIT

UPPERCASE 환경

프로젝트의 DEPENDENCY 파일에 Hanul/Contract2Object를 추가합니다.

웹 브라우저 환경

Contract2Object는 UPPERCASE-CORE-COMMON에 의존적입니다. 따라서 UPPERCASE-CORE/COMMON.js 코드가 필요합니다.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <script src="UPPERCASE-CORE/COMMON.js"></script>
        <script src="Contract2Object.js"></script>
        <!-- main.js에 코드 입력 -->
        <script src="main.js"></script>
        <script>INIT_OBJECTS();</script>
    </body>
</html>

Node.js 환경

npm install contract2object
require('contract2object');

SomeContract = OBJECT({
    preset : () => {
        return Contract2Object;
    },
    ...

사용 방법

SomeContract = OBJECT({
    preset : () => {
        return Contract2Object;
    },
    params : () => {
        return {
            abi : [{"constant":true,"inputs":...,
            address : '0x031Fa6bE087416386ab6b85fE97A0856164821c2'
        };
    }
});

예를 들어 스마트 계약에 다음과 같은 함수가 있다면,

function balanceOf(address user) external view returns (uint256 balance) {
    return balances[user];
}

다음과 같이 JavaScript 함수로 사용할 수 있습니다.

SomeContract.balancOf(user, (balance) => {
    ...
});

너무 큰 숫자의 경우 JavaScript의 숫자 타입으로는 범위가 벗어나는 경우가 있으므로, 이를 방지하고자 숫자의 경우 다음과 같이 문자열로도 반환합니다.

SomeContract.balancOf(user, (balance, balanceStr) => {
    ...
});

트랜잭션을 기다려야 하는 함수의 경우 트랜잭션이 끝나고 콜백이 실행됩니다.

SomeContract.approve({
    spender : spender,
    amount : amount
}, () => {
    ...
});

만약 트랜잭션 주소를 가져와야 하는 경우에는 다음과 같이 콜백을 2개 지정합니다.

SomeContract.approve({
    spender : spender,
    amount : amount
}, {
    transactionAddress : (address) => {
        ...
    },
    success : () => {
        ...
    }
});

payable 함수를 실행하는 경우에는 파라미터에 ether를 추가할 수 있습니다.

SomeContract.buy({
    ether : 12,
    amount : amount
}, () => {
    ...
});

사용 예시

라이센스

MIT

작성자

Young Jae Sim