Published on
Anchor

อัพเดท Anchor v0.24

2022-04-14-anchor-0.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
Discord