
____ __ ______ _____ ____ __ ___ _ _____ _____ ____ __ __
/ __ / / / / __ / ___ // __ / / / | / | / / | / ___// __ / //_/
/ / _ / / / _ / / / _ / / __ / / / / / / / | | / | / / / | | __ / / / / ,<
/ ____ / __ / ____ / ___ / / / _ / / / ___ / ___ | / / | / ___ | ___ / / / _ / / / | |
/ _ / / _ / / _ / _ / / ____ / _ ___ / _____ / _ / | _ / _ / | _ / _ / | _ | / ____ / _____ / _ / | _ | Bifurcado del Repo Veraze: Veraze-App/Solana-Php-SDK
Puede instalar el paquete a través del compositor:
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 .entonces
docker run -it solana-php-sdk /bin/bash Puede usar la clase Connection para un acceso conveniente a los métodos API. Algunos se definen en el código:
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 );Para todos los métodos posibles, consulte la documentación de la API.
La clase Connection es solo una capa de conveniencia ligera en la parte superior del cliente RPC. Puede, si lo desea, usar el cliente directamente, lo que le permite trabajar con el objeto Response completa:
use Attestto SolanaPhpSdk SolanaRpcClient ;
$ client = new SolanaRpcClient (SolanaRpcClient:: MAINNET_ENDPOINT );
$ accountInfoResponse = $ client -> call ( ' getAccountInfo ' , [ ' 4fYNw3dojWmQ4dXtSGE9epjRGy9pFSx62YypT7avPYvA ' ]);
$ accountInfoBody = $ accountInfoResponse -> json ();
$ accountInfoStatusCode = $ accountInfoResponse -> getStatusCode ();Aquí hay un ejemplo de trabajo de enviar una instrucción de transferencia a la cadena de bloques de Solana, puede anular el punto final con un punto final RPC personalizado.:
$ 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 );Para que funcione la serialización/desaltería de Borsh, un objeto de esquema de clase que refleja las estructuras del programa, basadas en el programa IDL debe aprobarse o definirse. p.ej
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 );
}
}Para comprender mejor la implementación y el uso, consulte las siguientes referencias:
Uso de ejemplo (esto se mejorará, 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 serializa y deserializa. Hecho - Prueba (s) - Cobertura
Documentación mejorada. WIP-Este documento + Índice de documentación (https://github.com/attestto-com/solana-php-sdk/tree/master/docs)
Construya más de la conexión, mensaje, SystemProgram, TokenProgram, MetaplexProgram Classes. WIP - Pruebas - Cobertura 4. [] Conexión :: Clase 5. [X] getLatestBlokChash :: class [fuente] - [prueba] - [cobertura] 6. [] getMinimumbalanceForreNExEmtion () 7. [] getTokenAccountBalance () 6. [] TransactionMessage :: class 7. [] Compiletov0message () 8. ] Programa SPL -Token 10. [] GetorceAteassociatedTokenAccount () 11. []
Mejorar las abstracciones alrededor de trabajar con datos binarios. ¿Hecho? - Prueba (s) - cobertura
Optimizaciones:
$recentBlockhash al enviar transacciones.¿Sugerencias? Abra una solicitud de problema o extracción: D
WIP - Trabajando en cobertura y deprecaciones. Ver informe de cobertura.
"scripts" : {
"test" : " vendor/bin/phpunit tests --coverage-clover=coverage.xml --coverage-filter src/ " ,
"format" : " vendor/bin/php-cs-fixer fix --allow-risk=yes "
},
composer testO
/verdor/bin/phpunit tests [options]Si descubre algún problema relacionado con la seguridad, envíe un correo electrónico a los mantenedores (consulte Composer.json) en lugar de utilizar el rastreador de problemas.
La licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.