
Thunderchain을 처음 알게 되었고 Thunderchain이 좋은 선택이라고 생각합니다. 그래서 그 위에 개발해서 적용하면 될 것 같아요 썬더체인은 테스트를 위한 샌드박스 환경을 제공하고 공식 문서는 좀 더 자세하게 작성되어 있습니다. 하지만 이 샌드박스 환경에서 관련 배포를 해봤기 때문에 호출에 대한 튜토리얼을 제공하겠습니다.
테스트 환경을 이용하기 위해서는 테스트를 위한 개발자 계정, 테스트를 위한 LinkToken 지갑 등 테스트 환경을 준비해야 합니다. 공식 문서는 개발자의 요구를 충족시키기 위해 많은 API를 제공합니다. ThunderChain을 사용하여 자신의 계약 응용 프로그램을 개발하는 첫 번째 단계는 개발자 이메일을 등록하는 것입니다.
개발자가 자신의 앱이 ThunderChain 개방형 플랫폼의 계약 서비스를 사용하도록 하려면 구성 URL만 호출하면 되며 관련 인터페이스는 공식 문서를 통해 볼 수 있습니다.예를 들어 명령줄 curl 명령은 이메일에 사용할 수 있습니다. 등록하고 json 이메일 주소를 직접 입력할 수 있습니다. 귀하의 이메일 주소는 다음과 같습니다.
curl -H "Content-Type:application/json" -X POST -d
'{"email":"1191094115@qq.com"}' https://sandbox-
walletapi.onethingpcs.com/api/linktest/email_code
사서함이 등록되지 않은 경우 다음을 반환합니다.
{"code":0,"data":{},"msg":""}
동시에 사서함은 다음과 같은 이메일을 받게 됩니다.
이것은 Thunderchain 개발의 첫 번째 단계에 불과합니다. 물론 명령줄에 직접 명령을 입력하는 것 외에도 공식 api 호출 웹 페이지를 통해 api를 호출할 수도 있습니다.
웹 사이트 링크:
https://thunderchain.docs.apiary.io/#reference/0
페이지를 열어 다음을 확인하세요.
이메일 확인 코드 받기를 클릭하여 제공하십시오.
웹 페이지를 사용하여 api를 호출할지 또는 명령줄을 통해 호출할지 여부는 기본 설정에 따라 다릅니다.
이메일 확인 코드 받기 버튼을 클릭하면 페이지가 변경됩니다.
이 때 본문 및 기타 옵션 URL 매개 변수를 채워야 합니다. 헤더는 무시할 수 있습니다.
작성 후 리소스 호출 버튼을 클릭하면 게시 요청이 성공적으로 전송됩니다.
이 시점에서 응답 창에 관련 정보가 표시됩니다.
위는 API의 기본 호출 동작에 익숙하며, 전체 과정을 좀 더 간단하게 설명하기 위해 웹 페이지를 통해 완전히 배포하고 컨트랙트를 호출해 보겠습니다. 물론 실제 애플리케이션은 개발자가 네트워크 라이브러리를 사용하여 소프트웨어에서 API 호출을 수행하여 계약 배포 및 호출을 구현하는 것입니다.
이메일 인증 코드를 받은 후 이메일 주소를 등록할 수 있습니다.
이전 웹 페이지에서 개발자의 이메일 주소로 등록된 등록 버튼을 클릭하면 다음을 볼 수 있습니다.
이때 이전에 등록한 이메일과 이메일로 받은 인증번호를 입력합니다.
등록 후 이메일을 받을 수 있습니다.
이들은 계약의 다양한 작업에 대한 두 가지 서명입니다.
컨트랙트를 호출하려면 트랜잭션 수수료인 ThunderChain 컨트랙트 가상 머신에 연료를 제공해야 하며 테스트 계정 충전 인터페이스(이 인터페이스는 하루에 10번만 호출할 수 있음)를 통해 일부 테스트 환경 토큰을 얻을 수 있습니다. 여기에 계약 개발자와 ThunderChain 개발 플랫폼이 호출해야 하는 논리를 이해하지 못하는 아이들이 있을 수 있습니다.여기 공식 문서의 흐름도가 있습니다.
위의 그림은 상대적으로 명확하며 설명이 필요합니다.
우선 LinkToken 포켓은 전체 계약 호출과 분리될 수 없으며 포켓에 저장된 LinkToken 개인 키가 트랜잭션을 발행하고 해당 LinkToken 주소가 계약 발신자로 사용됩니다.
따라서 첫 번째 단계는 테스트를 위해 LinkToken 포켓을 충전하는 것입니다. 충전을 위한 테스트 인터페이스는 다음과 같습니다.
https://sandbox-walletapi.onethingpcs.com/api/linktest/recharge。
매개변수 설명:
충전하려면 먼저 LinkToken 주소가 있어야 하며 LinkToken 포켓을 통해 계정을 생성해야 합니다.
json 데이터 빌드, 계정은 주소입니다.
서명은 다음과 같습니다.
md5(email=xxx&address=xxx&secret=xxx)
여기에서 xxx는 개인 정보로 대체됩니다. 아래 그림과 같이 개인 정보가 모자이크 처리되었습니다. 이를 통해 서명을 얻을 수 있으며 이때 api 인터페이스를 호출하여 인터페이스 호출을 할 수 있다.
그림과 같이 json을 빌드합니다.
개발자 중 한 명이 이 인터페이스를 하루에 10번만 호출할 수 있으며 호출 후 LinkToken Pocket을 새로 고칩니다.
이 시점에서 1 LinkToken이 도착했습니다!
LinkToken을 확보한 후 Thunder Chain에 컨트랙트를 배포할 수 있으며 성공적으로 컨트랙트를 배포하려면 기본 가스를 제공해야 합니다.
위의 흐름도와 같이 컨트랙트를 배포하기 위해서는 먼저 해당 json 데이터를 빌드하여 보내야 합니다.
https://sandbox-walletapi.onethingpcs.com/api/linktest/contract/deploy 인터페이스
매개변수 설명:
위의 사항을 준비한 후 계약을 개발하고 배포할 수 있습니다. 계약 개발은 truffle로 개발할 수 있습니다.
트러플을 사용하여 Simplestore 계약을 개발하십시오. 여기서 바이트코드는 16진수입니다. 계약이 라이브러리 계약을 참조하는 경우 라이브러리 계약을 Thunder 체인에 배포하고 실제 계약의 참조된 라이브러리 필드를 다음으로 변경해야 합니다. 도서관 주소 . 이와 같이 바이트코드는 모두 바이너리이며 트러플 컴파일 명령을 통해 빌드 폴더를 얻을 수 있습니다. 컨트랙트에서 호출해야 하는 바이트코드 필드 정보 찾기
계약은 다음과 같습니다.
pragma solidity ^0.4.21;
contract SimpleStorage {
uint myVariable;
function set(uint x) public {
myVariable = x;
}
function get() constant public returns (uint) {
return myVariable;
}
}
간판을 만든 후
JSON을 얻을:
{
"email": "1191094115@qq.com",
"bytecode": "0x608060405234801561001057600080fd5b5060df8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c146078575b600080fd5b348015605957600080fd5b5060766004803603810190808035906020019092919050505060a0565b005b348015608357600080fd5b50608a60aa565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820101eb74d2d65698a7fd1e63666842673ffb013a500c768f84643fc6b896519430029",
"params": "",
"sign": "0d0734ca430c7b79d332d700b0b44cd9"
}
답을 얻었다:
ID를 얻은 후 ID를 사용하여 계약 주소를 조회할 수 있습니다.
요청된 정보는 다음과 같습니다.
방법: POST
URL: /api/linktest/contract/address
BODY: JSON
매개변수 설명:
매개변수 이름
매개변수 유형
설명하다
설명하다
string
예
테스트에 사용되는 이메일은 주로 테스트 메시지를 수신하는 데 사용됩니다.
Id
int
예
컨트랙트 배포로 반환된 ID
Sign
string
예
서명 md5(email=xxx&id=xxx&secret=xxx), xxx는 요청의 실제 값을 채웁니다.
응답
매개변수 이름
매개변수 유형
설명하다
설명하다
Code
int
예
오류 코드, 0: 성공, 0이 아닌 경우: 실패
Msg
string
예
에러 메시지
Data
object
아니요
반환 데이터 요청
서명 받기:
계약 주소는 나중에 얻을 수 있습니다.
컨트랙트 주소를 얻은 후 컨트랙트를 호출할 수 있습니다.
위 흐름도에 따르면 컨트랙트 콜을 하려면 먼저 prepay_id를 얻어야 제3자에서 LinkToken Pocket을 사용할 수 있습니다. 데모.
테스트 환경:
https://sandbox-walletapi.onethingpcs.com/getPrepayId
요청 방법: 게시
prepay_id를 얻을 때 입력한 개인 키는 이전 이메일에서 보낸 비밀입니다.
이 같은 기호를 얻을
매개변수가 동일하기 때문에 각 요청의 json은 동일하며 이때 응답을 얻습니다.
두 가지 계약 방식이 있는데 하나는 상수 방식이고 다른 하나는 가스를 필요로 하는 방식입니다. 이번에는 Simplestore의 get() 메서드를 호출합니다. 그런 다음 다음을 충족해야 합니다.
방법: POST
URL: /call
BODY: JSON
매개변수 설명:
매개변수 세부정보
개체 세부 정보
객체 - 트랜잭션 호출 객체
여기서 데이터는 호출 함수의 해시 문자열입니다.
계산 방법은 다음과 같습니다.
메서드 함수 bar(fixed[2] x,bool y)가 있다고 가정합니다. 여기서 x는 1이고 y는 2입니다.
이때 계산된 데이터는 다음과 같습니다.
1. bar(fixed[2], bool)의 ASCII 코드에 sha3을 수행하고 결과의 16진수 표현의 처음 8자리를 취합니다.
2. x 값을 uint32 숫자로 변환하고 y 값을 uint32 숫자로 변환
3. 1단계와 2단계에서 얻은 문자열을 조합하여 데이터를 얻습니다.
get()의 sha3-256 값을 얻을 수 있습니다.
6d4ce63caa65600744ac797760560da39ebd16e8240936b51f53368ef9e0e01f
처음 8 자리를 취하십시오
매개변수가 없기 때문에 json을 빌드할 수 있습니다.
이때 결과는
계약이 배포될 때 get 메서드는 0을 가져오기 때문에 0을 반환합니다.
상수 메서드를 호출한 후 가스가 필요한 메서드를 호출할 수 있습니다.
이번에는 set(uint x) 함수를 호출합니다.
이때 json 형식에 따르면 set(uint256)의 sha3-256 해시값을 구하고 처음 8비트를 취해야 한다.
cccdda2c
이 시점에서 json을 구성할 수 있습니다.
x 256을 만드는 동시에 십진수로 256의 16진수 100을 계산한 다음 100~32비트를 채워서
0x00000000000000000000000000000100
다시 합치다
0x60fe47b100000000000000000000000000000100
이것을 데이터라고 합니다.
주소는 여기, LinkToken Pocket의 콜백 주소를 직접 선택할 수 있습니다. json에 있는 gas_limit는 이러한 요청을 통해 얻을 수 있으며, 물론 컨트랙트가 성사되려면 가스는 최대한 커질 수 있다.
반환 값은 16진수이므로 10진수로 변환하면 됩니다.
10진수로 환산하면 26477인데 사실 컨트랙트는 41605를 쓰니까 가스가 더 큰게 맞음
빌드 JSON
답을 얻었다:
이때 획득한 콜백은 LinkToken Pocket의 콜백 url입니다. URL을 QR 코드로 변환합니다.
그런 다음 LinkToken Pocket을 사용하여 다음을 스캔합니다.
성공한 경우:
계약이 성공적으로 실행되면
실패하는 경우: 여기에서 잘못된 메서드를 호출합니다(잘못된 데이터 구성).
지금까지 계약 통화 프로세스가 종료되었습니다.
컨트랙트의 변수를 0에서 256으로 변경하였으니 이제 get 메소드를 통해 확인해보자.
이전 상수 방식을 통해 이때 응답은 다음과 같습니다. ps 상수 방식은 가상 머신을 통해 트랜잭션 수수료로 실행할 수도 있지만 반드시 필요한 것은 아닙니다.
16진수를 10진수로 바꾸면 256이 됩니다!
이상은 썬더체인 배포 계약 과정의 첫 경험이며, 앞으로 아이들의 신발에 조금이나마 도움이 되었으면 합니다^.^ 학생 여러분.