이더리움 토큰을 php로 전송하는걸 해보자...
curl을 이용해 이더리움 서버에 접속한뒤 json rpc를 이용해 전송해본다...
<?php
$number=2000000;
$number = $number.'000000000000000000';
$number=gmp_init($number,10);
$number16=gmp_strval($number, 16);
?>
토큰은 16진수다. 게다가 0을 18개정도 붙이고 16진수로 바꿔줘야한다...(토큰마다 다르다 8개를 붙이기도 하고 18개를 붙이기도 한다. etherscan에서 조회하면 나온다.)
이렇다보니 위처럼 2백만개 정도 보내려고 해보면 숫자가 정확히 맞지 않는 문제가 발생한다..
왜냐면 php는 그렇게 큰 수를 인식하지 못하기 때문이다.
그래서 gmp라는 모듈을 설치해서 작업해야한다.
gmp는 검색해서 알아보자...(우분투는 설치가 쉬운데 centos는 어렵더라)
위처럼 보내려고 하는 토큰의 갯수에 0을 18개 붙인뒤 16진수로 변환한 숫자를 $number16에 넣는다...
<?php
$numLen=strlen($number16);
$zeroCnt=64-$numLen;
$zero=str_repeat("0",$zeroCnt);
$sendAmount=$zero.$number16;
$toAddr="F74e1064E12c725Ab4c18764bEE5c5daCd3482Bd";
$sendData = "0xa9059cbb000000000000000000000000".$toAddr.$sendAmount;
$contractAddr="0x999312ca356d8997815876216e1971e2c47e4a4f";
$data='{"jsonrpc": "2.0", "id": 1, "method": "eth_sendTransaction", "params": [{"from":"0xb62fe1acc555d8cc6075c25db8f33612791abd49", "to":"'.$contractAddr.'", "gas": "0x11170", "value":"0x0",
"data":"'.$sendData.'"}]}';
?>
이렇게 만들어준다...
여기서 $sendData의 "0xa9059cbb"는 https://tokenstandard.codetract.io/ 요기서 확인가능하다...
뒤에 0은 24개다...
그리고..
<?php
function json_rpc($data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://0.0.0.0:8545");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($ch);
}
$output=json_decode(json_rpc($data));
echo "<pre>";
print_r($output);
?>
위 함수에 던져준다...물론 테스트 서버다...각자의 이더 서버 주소를 넣어주면 된다...
전송확인은 etherscan에서 해보자...
이더스캔 api는
https://api-rinkeby.etherscan.io/api?module=account&action=tokenbalance&contractaddress=0x999312ca356d8997815876216e1971e2c47e4a4f&address=0xf74e1064e12c725ab4c18764bee5c5dacd3482bd&tag=latest&apikey=PU4J188DZWU72TAM9DGCC9K5VWHEXHKXQC
이렇게 확인가능하다...물론 테스트넷이다...rinkeby에서 작업했다..
'PHP' 카테고리의 다른 글
PHP에서 변수에 변수 붙여서 변수 만들기 (0) | 2019.04.10 |
---|---|
php와 json rpc를 이용한 이더리움 토큰 발란스 확인 (0) | 2019.01.30 |
빗썸API를 이용해 인바운드 API JSON 데이타 맛보기 (0) | 2018.06.19 |
배열에 특정 값이 들어가 있는지 확인 (0) | 2018.06.19 |
배열을 출력할때 배열의 첫번째값을 출력하지 않기 (0) | 2018.06.19 |