อัพเดท Anchor v0.24
ก่อนหน้าที่ผมเขียนบทความไว้ เขียน Solana Program ด้วย Anchor Framework เมื่ออาทิตย์ก่อน ณ ตอนนั้นที่เขียน ตัว Anchor คือ เวอร์ชั่น 0.23 แต่วันนี้ Anchor มีการอัพเดทเป็น 0.24 ครับ ทำให้โค๊ดอาจมีเปลี่ยนแปลงบ้างเล็กน้อย
ก็เลยจดบันทึกไว้ เผื่อว่าใครที่หลงเข้ามาอ่าน แล้วใช้ Anchor คนละเวอร์ชั่น - Reference : Changelog
AnchorProvider
มีผลกับ Anchor Client ครับ ที่เรียก Provider
เปลี่ยนจาก v0.23
const anchor = require('@project-serum/anchor');
anchor.Provider;
เป็นแบบ v0.24
const anchor = require('@project-serum/anchor');
anchor.AnchorProvider;
ฟังค์ชั่น provider.send
จะใช้ provider.sendAndConfirm()
แทน
จาก
await provider.send(...);
เป็น
await provider.sendAndConfirm(...);
หรือสามารถใช้แบบนี้แทนก็ได้ (เป็นการ hack นิดหน่อย โดยไม่ต้องไปอัพเดท library)
const provider = anchor.AnchorProvider.env();
provider.send = provider.sendAndConfirm;
.methods
ฝั่ง Client ให้ใช้ .methods
แทน rpc
ซึ่งจริงๆ ณ ตอนเขียนบทความ ผมก็มีเขียนเพิ่มไปให้ว่าเปลี่ยนมาใช้ .methods
เพราะเห็นมันแนะนำ และ rpc
มัน deprecated น่าจะยกเลิกในอนาคต
const tx = await program.rpc.initialize();
เป็น
const tx = await program.methods.initialize().rpc();
หรืออย่างเคส การเรียก method ที่ต้องส่ง argument กับ accounts จะเป็นประมาณนี้
await program.rpc.yourFunction(
{ arg: 'something' },
{
accounts: {
myAccount: myAccount.publicKey,
user: provid.wallet.publicKey,
systemProgram: anchor.web3.SystemProgram.programId
},
signers: [myAccount]
}
);
ก็จะใช้เป็นแบบนี้แทน (chain method accounts()
กับ signers()
)
await program.methods.yourFunction({ arg: 'something' }).accounts({
myAccount: myAccount.publicKey,
user: provid.wallet.publicKey,
systemProgram: anchor.web3.SystemProgram.programId
})
.signers([myAccount])
}).rpc();
ส่วนอื่นๆ ก็มี breaking บ้าง เช่นพวก spl-token
ตัว cli
แล้วก็ตัว avm
อ่านเพิ่มเติม - Changelog
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit