
____ __ ______ _____ ____ __ ___ _ _____ _____ ____ __ __
/ __ / / / / __ / ___ // __ / / / | / | / / | / ___// __ / //_/
/ / _ / / / _ / / / _ / / __ / / / / / / / | | / | / / / | | __ / / / / ,<
/ ____ / __ / ____ / ___ / / / _ / / / ___ / ___ | / / | / ___ | ___ / / / _ / / / | |
/ _ / / _ / / _ / _ / / ____ / _ ___ / _____ / _ / | _ / _ / | _ / _ / | _ | / ____ / _____ / _ / | _ | ฟอร์คจาก 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 blockchain คุณสามารถ overrride endpoint ด้วยจุดสิ้นสุด 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 );สำหรับการทำให้เป็นอนุกรม/deseralization เพื่อการทำงานของ Borsh การทำงาน :: วัตถุสคีมาที่สะท้อนโครงสร้างของโปรแกรมตามโปรแกรม IDL จะต้องผ่านหรือกำหนด เช่น
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 เป็นอนุกรมและ deserialize เสร็จแล้ว - ทดสอบ - ความครอบคลุม
ปรับปรุงเอกสาร WIP-เอกสารนี้ + ดัชนีเอกสาร (https://github.com/attestto-com/solana-php-sdk/tree/master/docs)
สร้างการเชื่อมต่อข้อความ SystemProgram เพิ่มเติมโทเค็นโปรแกรมคลาส MetaplexProgram WIP - การทดสอบ - ความคุ้มครอง 4. [] การเชื่อมต่อ :: คลาส 5 [x] getlatestblokchash :: คลาส [แหล่งที่มา] - [ทดสอบ] - [ความครอบคลุม] 6. [] getMinimumbalanceForRentExemption () [] [] [] [] [] [] โปรแกรม SPL -token 10. [] getorCreateaseaseSociatedTokenAccount () 11. [] getAssociatedTokenaddresssync () 12. [] createaseSociatedTokenAccountInstruction () 11. [] createsyncNativeIntruction ()
ปรับปรุง abstractions เกี่ยวกับการทำงานกับข้อมูลไบนารี เสร็จแล้ว? - ทดสอบ - ความครอบคลุม
การเพิ่มประสิทธิภาพ:
$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]หากคุณค้นพบปัญหาที่เกี่ยวข้องกับความปลอดภัยโปรดส่งอีเมลถึงผู้ดูแล (ดู Pomposer.json) แทนที่จะใช้ตัวติดตามปัญหา
ใบอนุญาต MIT (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม