
____ __ ______ _____ ____ __ ___ _ _____ _____ ____ __ __
/ __ / / / / __ / ___ // __ / / / | / | / / | / ___// __ / //_/
/ / _ / / / _ / / / _ / / __ / / / / / / / | | / | / / / | | __ / / / / ,<
/ ____ / __ / ____ / ___ / / / _ / / / ___ / ___ | / / | / ___ | ___ / / / _ / / / | |
/ _ / / _ / / _ / _ / / ____ / _ ___ / _____ / _ / | _ / _ / | _ / _ / | _ | / ____ / _____ / _ / | _ | Verze Repo : Verze-App/Solana-Php-SDK에서 포크
작곡가를 통해 패키지를 설치할 수 있습니다.
composer require attestto/solana-php-sdkgit clone https://github.com/Attestto-com/solana-php-sdk.git
cd solana-php-sdk
composer install
docker build -t solana-php-sdk .그 다음에
docker run -it solana-php-sdk /bin/bash Connection 클래스를 사용하여 API 메소드에 편리하게 액세스 할 수 있습니다. 일부는 코드에 정의되어 있습니다.
use Attestto SolanaPhpSdk Connection ;
use Attestto SolanaPhpSdk SolanaRpcClient ;
// Using a defined method
$ sdk = new Connection ( new SolanaRpcClient (SolanaRpcClient:: MAINNET_ENDPOINT ));
$ accountInfo = $ sdk -> getAccountInfo ( ' 4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA ' );
var_dump ( $ accountInfo );가능한 모든 방법은 API 문서를 참조하십시오.
Connection 클래스는 RPC 클라이언트 위에있는 가벼운 편의 계층 일뿐입니다. 원하는 경우 클라이언트를 직접 사용하여 전체 Response 객체로 작업 할 수 있습니다.
use Attestto SolanaPhpSdk SolanaRpcClient ;
$ client = new SolanaRpcClient (SolanaRpcClient:: MAINNET_ENDPOINT );
$ accountInfoResponse = $ client -> call ( ' getAccountInfo ' , [ ' 4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA ' ]);
$ accountInfoBody = $ accountInfoResponse -> json ();
$ accountInfoStatusCode = $ accountInfoResponse -> getStatusCode ();다음은 Solana 블록 체인으로 전송 명령을 보내는 예제입니다. 사용자 정의 RPC 엔드 포인트로 엔드 포인트를 과대 평가할 수 있습니다. :
$ client = new SolanaRpcClient (SolanaRpcClient:: DEVNET_ENDPOINT );
$ connection = new Connection ( $ client );
$ fromPublicKey = KeyPair:: fromSecretKey ([...]);
$ toPublicKey = new PublicKey ( ' J3dxNj7nDRRqRRXuEMynDG57DkZK4jYRuv3Garmb1i99 ' );
$ instruction = SystemProgram:: transfer (
$ fromPublicKey -> getPublicKey (),
$ toPublicKey ,
6
);
$ transaction = new Transaction ( null , null , $ fromPublicKey -> getPublicKey ());
$ transaction -> add ( $ instruction );
$ txHash = $ connection -> sendTransaction ( $ transaction , $ fromPublicKey );Borsh Serialization/Deseralization이 작동하려면 프로그램 IDL을 기반으로 프로그램 스트러크를 반영하는 클래스 :: schema 객체를 전달하거나 정의해야합니다. 예를 들어
class DidData
{
use BorshObject; //trait
public $ keyData ;
public const SCHEMA = [
VerificationMethodStruct::class => VerificationMethodStruct:: SCHEMA [VerificationMethodStruct::class],
ServiceStruct::class => ServiceStruct:: SCHEMA [ServiceStruct::class],
self ::class => [
' kind ' => ' struct ' ,
' fields ' => [
[ ' offset ' , ' u64 ' ],
[ ' version ' , ' u8 ' ],
[ ' bump ' , ' u8 ' ],
[ ' nonce ' , ' u64 ' ],
[ ' initialVerificationMethod ' , ' string ' ],
[ ' flags ' , ' u16 ' ],
[ ' methodType ' , ' u8 ' ],
[ ' keyData ' , [ ' u8 ' ]],
[ ' verificationMethods ' , [VerificationMethodStruct::class]],
[ ' services ' , [ServiceStruct::class]],
[ ' nativeControllers ' , [ ' pubKey ' ]],
[ ' otherControllers ' , [ ' string ' ]],
],
],
];
public static function fromBuffer ( array $ buffer ): self
{
return Borsh:: deserialize ( self :: SCHEMA , self ::class, $ buffer );
}
}구현 및 사용에 대한 이해를 높이려면 다음 참조를 참조하십시오.
예제 사용 (이것은 개선 될 것입니다, WIP) :
/**
* deserializeDidData
*
* @param string $dataBase64 The base64 encoded data of the DID data account
* @return DidData The deserialized DID data object
* @example DidSolProgram::deserializeDidData('TVjvjfsd7fMA/gAAAA...');
*/
static function deserializeDidData ( $ dataBase64 )
{
$ base64String = base64_decode ( $ dataBase64 );
$ uint8Array = array_values ( unpack ( ' C* ' , $ base64String ));
$ didData = DidData:: fromBuffer ( $ uint8Array ); // See above code block
$ keyData = $ didData -> keyData ;
$ binaryString = pack ( ' C* ' , ... $ keyData );
$ b58 = new Base58 ();
$ base58String = $ b58 -> encode ( $ binaryString );
$ didData -> keyData = $ base58String ;
return $ didData ;
}$instruction = SystemProgram::abc() 에서 작동 중입니다.Borsh는 직렬화 및 사형화. 완료 - 테스트 - 적용 범위
개선 된 문서. WIP-이 문서 + 문서 색인 (https://github.com/attestto-com/solana-php-sdk/tree/master/docs)
더 많은 연결, 메시지, 시스템 프로그램, 토큰 프로그램, MetaplexProgram 클래스를 더 많이 구축하십시오. WIP- 테스트 - 커버리지 4. [] 연결 :: 클래스 5. ] SPL -TOKE 프로그램 10. [] GetOrCreateSociatedTokenAccount () 11.
이진 데이터 작업에 대한 추상화를 향상시킵니다. 완료? - 테스트 - 적용 범위
최적화 :
$recentBlockhash .제안? 문제를 엽니 다. 또는 풀 요청 : d
WIP- 적용 범위 및 감가 상각 작업. 보도 보고서를 참조하십시오.
"scripts" : {
"test" : " vendor/bin/phpunit tests --coverage-clover=coverage.xml --coverage-filter src/ " ,
"format" : " vendor/bin/php-cs-fixer fix --allow-risk=yes "
},
composer test또는
/verdor/bin/phpunit tests [options]보안 관련 문제를 발견하면 문제 추적기를 사용하는 대신 관리자에게 이메일을 보내십시오 (Composer.json 참조).
MIT 라이센스 (MIT). 자세한 내용은 라이센스 파일을 참조하십시오.