이 기사는 PHP와 Ethereum 클라이언트 간의 상호 작용에 대한 관련 지식 포인트를 알려줍니다. 이것이 필요한 친구들은 따라하고 배울 수 있습니다.
php는 이더리움 rpc 서버와 통신합니다
1. Json RPC
Json RPC는 json 기반의 원격 프로시저 호출입니다. 간단히 말하면 RPC 서버에서 메소드를 호출하기 위해 데이터를 json 형식으로 게시하는 것입니다. 일반적으로
1 2 3 4 5 |
|
메서드 이름:
params: 매개변수 목록
id: 프로시저 호출에 대한 고유 식별 번호
2. Json RPC 클라이언트 빌드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
|
비교적 간단한 코드, take 과거에는 그냥 사용하세요. packagist.org에 가서 직접 rpc 클라이언트를 찾을 수도 있습니다.
3. RPC를 호출하는 두 가지 유형의 메소드
호출해야 하는 두 가지 유형의 메소드가 있습니다. 하나는 RPC 서버 고유의 메소드입니다. , 다른 하나는 계약 방법입니다.
RPC 서버 메서드는 json 형식을 호출합니다.
1 2 3 4 5 |
|
RPC 서버에 내장된 메서드 목록
내장 메서드를 호출하는 방법은 비교적 간단합니다. 위 링크를 참조하세요. 대부분은 예시입니다.
계약 메서드는 json 형식을 호출합니다
계약 메서드를 호출하려면 내장 메서드에서 eth_call을 사용해야 합니다. 계약 메서드 이름과 계약 메서드 매개 변수 목록은 params를 사용하여 반영됩니다. 계약에서 BalanceOf 메소드를 호출하려고 합니다. json 데이터는 어떻게 구성되어야 할까요?
먼저 getBalanace의 함수 구현을 살펴보세요:
1 |
|
함수 프로토타입 추출:
1 |
|
geth 콘솔에서 다음 명령을 실행하세요.
1 |
|
Get 함수 해시 "0x70a08231"
가정 쿼리할 주소는 address _owner = "0x38aabef4cd283ccd5091298dedc88d27c5ec입니다. 5750", 앞에 있는 "0x"를 제거하고 왼쪽에 24개의 0을 추가합니다(일반 주소 길이는 42비트이며, '0x'를 제거한 후 40비트). 64비트 16진수를 구성합니다. 매개변수를 사용자 정의합니다.
최종 매개변수는 "0x70a082310000000000000000000000038aabef4cd283ccd5091298dedc88입니다. d27c5ec5750"
가정하자 우리 계약 주소는 "0xaeab4084194B2a425096 fb583Fbcd67385210ac3"입니다.
그런 다음 최종 json 데이터는 다음과 같습니다.
1 2 3 4 5 |
|
위 json 데이터를 포스트 모드로 보냅니다. 서버에 계약 메서드 "balanceOf"를 호출하여 토큰을 쿼리할 수 있습니다.
계약의 다른 메소드를 호출하는 경우에도 위의 메소드를 따라야 합니다. 이체 메소드를 다시 분석하여 감상을 심화해 보겠습니다.
먼저 코드의 함수 구현을 살펴보세요.
1 |
|
incond로, 기능 프로토 타입을 추출합니다. "0x38aabef4cd283ccd5091298dedc88d27c5ec5750", "0x"로 이동하여 64비트에 0을 추가합니다.
두 번째 매개변수는 uint256_value = 43776을 가정하고 16진수 시스템으로 변환됩니다. "0xab00" 이후 "0x"로 이동하여 추가합니다. 함께 연결하세요"0xa9059cbb000000000000000000000000038aabef4cd283ccd5091298dedc88d27c5ec5750000000000000000000000000 0000000000000000000000000000000ab00"json 데이터 빌드:1 |
|
이전인 주소
계약 주소
데이터 얻은 16진수 위의 작업을 통해
위 단계를 코드로 변환합니다.
1 |
|
코드는 비교적 간단합니다. 주의할 점이 몇 가지 있습니다. 포인트: 값 단위
전달 함수는 10^-18로 매우 작으므로 1000번을 전달하려면 실제로 10의 18승을 곱해야 합니다. 여기서 18은 소수입니다.
때문에 포인트 1, pow 함수 대신 bcpow를 사용해야 합니다.
PHP와 함께 제공되는 dechex 함수는 정수 유형이 PHP_INT_MAX보다 클 수 없으며 이 숫자는 32-에서 4294967295입니다. 비트 머신. 1번 항목으로 인해 모든 숫자는 10의 18승을 곱해야 하므로 결과값은 PHP_INT_MAX보다 훨씬 큽니다. 구현 방법을 모르는 경우에는 10진수를 16진수로 직접 변환하는 것이 좋습니다. 위의 코드에.
이체 등 특정 계약 방법을 실행할 때는 먼저 사용자 잠금을 해제해야 합니다.
트랜잭션을 보낸 후 서버 측에서 마이닝을 시작해야 트랜잭션이 실제로 블록에 기록됩니다. , 예를 들어 이체를 호출한 후 상대방이 계정을 받지 못한 것을 발견하면 아직 놀라지 말고 채굴을 시작하십시오. 자동 마이닝을 활성화하려면 --mine.
1 2 3 4 5 |
|
PHP는 PHP 예제를 공유하는 캐러셀 복권 알고리즘을 구현합니다.
PHP는 컬 멀티를 사용하여 동시 요청 예제 PHP 기술을 구현합니다.
위 내용은 PHP 및 Ethereum 클라이언트 상호 작용 PHP 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!