이더리움 기반 토큰

이더리움은 블록체인 생태계를 이루고 있습니다.

 

현재 나와있는 암호화폐의 가지수는

많지만 대부분 이더리움 플랫폼을 이용한

토큰입니다.

 

ERC는 Ethereum Request for Comment 의

약자로써 이더리움 네트워크에서 발행되는 토큰의

표준을 정의합니다.

 

이더리움은 말하자면 인터넷의 OS 같은 것입니다.

스마트폰에 안드로이드가 있고 애플에 IOS가

있는 것처럼 이더리움 플랫폼 안에서 작동되는

DApp(디앱)들이 사용하는 데이터의 형식을

토큰이라고 말할 수 있습니다.

 

이 토큰(token)들의 표준을 ERC라 하며

ERC20이 많이 알려져 있습니다.

표준이라고 거창한 것은 아니고

스마트 콘트랙에 들어가야 하는

항목이 정해져 있습니다.

전체공급량, 잔고, 전송, 승인 등

표준계약서 정의라고도 말할 수 있겠네요.

 

블록체인이 작동하는 방식중에

스마트 컨트랙트는 조건에 의하여

네트워크에서 자동으로 체결되는 계약서입니다.

 

예를 들어서 좋아요를 누르면

포인트(암호화폐)를 10점 준다거나

프로그래밍의 if then 구문으로

조건이 주어지면 실행하는 것을 뜻합니다.

 

여하튼 내부적으로는 복잡해보이지만

기본으로 알아야 할 것은

토큰을 교환하는 스마트 컨트랙이

이더리움의 기본 작동 방식이다.

토큰은 우리가 아는 이더리움 기반

알트 코인이 될 수 있다.

(많은 ICO 코인이 ERC20으로 개발됨

이는 자체 네트워크가 없어도

이더리움 메인넷에 수수료(gas fee)를

지불하여 사용한다는 개념)

 

그럼 파이썬으로 접속해보겠습니다.

 

VeChain 토큰에 접속하기

 

여기서는 VeChain 토큰에 접속해보겠습니다.

 

아래 Etherscan 웹사이트의 VeChain 토큰에 가면

Profile Summary 에 Contract 주소가 있습니다.

 

이 Contract 주소를 사용할 겁니다.

 

$0.1302 | VeChain (VEN) Token Tracker | Etherscan

 

VeChain (VEN) Token Tracker | Etherscan

VeChain (VEN) Token Tracker on Etherscan shows the price of the Token $0.1302, total supply 1,000,000,000, number of holders 46,068 and updated information of the token. The token tracker page also shows the analytics and historical data.

etherscan.io

 

다음의 코드는 VeChain Contract 에 접속해서

전체공급량(totalSuppy)과 name, symbol 을 가져오고

현재 VeChain 토큰에서 가장 많은 코인이 들어있는

지갑의 잔고를 확인합니다.

(블록체인 장부는 기본적으로 공개되있기 때문에

잔고과 거래 내역이 확인 가능합니다.

단 공개키(주소)만 보고서는

누가 소유하고 있는지 알 수 없습니다.)

-> 이것을 고래지갑(Whale wallet)이라고 함

import json
from web3 import Web3

infura_url = "Infura 메인넷 URL"
web3 = Web3(Web3.HTTPProvider(infura_url))
print("- Connection : ", web3.isConnected())

abi = json.loads('[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"seal","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_bonus","type":"uint256"}],"name":"offerBonus","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"isSealed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"lastMintedTimestamp","outputs":[{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_isRaw","type":"bool"},{"name":"timestamp","type":"uint32"}],"name":"mint","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":false,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]')
address = "0xd850942ef8811f2a866692a623011bde52a462c1"

checksum = Web3.toChecksumAddress(address)
contract = web3.eth.contract(address=checksum, abi=abi)
print(contract)

totalSupply = contract.functions.totalSupply().call()
print(web3.fromWei(totalSupply, 'ether'))

print(contract.functions.name().call())
print(contract.functions.symbol().call())

rich_addr = Web3.toChecksumAddress('0x00000000000000000000045261d4ee77acdb3286')
balance = contract.functions.balanceOf(rich_addr).call()
print(web3.fromWei(balance, 'ether'))
- Connection :  True
<web3._utils.datatypes.Contract object at 0x0000015F287A2AF0>
1000000000
VeChain Token
VEN
230530627.177397647427407078

abi (application binary interface)를 json 형식으로 가져옵니다.

 

abi 도 etherscan 에서 Contract 탭을

클릭하면 확인할 수 있습니다.

여기에 있는 내용을 복사해서

contract 인스턴스 생성시 인수로 전달합니다.

 

VeChain ABI
VeChain ABI

 

contract 인스턴스를 생성한 후

개별 지갑(address)에 대한 정보도 확인할 수 있습니다.

 

언뜻 복잡하게 보이지만

그냥 있는 정보를 가져오는 겁니다.

 

지난 포스팅에서는 이더리움 네트워크에

접속하고 이번에는 이더리움 기반 ERC20

토큰에 접속해봤습니다.

 

Ethescan 에서 많은 정보를 열람할 수 있고

또 암호화폐의 거래내역도 확인할 수 있습니다.

 

거래의 내용들을 잘 읽어 본다면

좀 더 이해하기 수월할 것 입니다.

 

 

web3 모듈로 이더리움 메인넷 접속하기 / Infura 가입 - 파이썬 블록체인 프로그래밍 1

 

web3 모듈로 이더리움 메인넷 접속하기 / Infura 가입 - 파이썬 블록체인 프로그래밍 1

파이썬 web3 모듈 파이썬의 web3 모듈을 사용하면 이더리움 블록체인에서 스마트 컨트랙의 정보를 읽어올 수 있습니다. 이 튜토리얼에서는 이더리움의 메인넷에 접속하여 ERC20 토큰의 스마트 컨트

digiconfactory.tistory.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band