Skip to content

canfly1019/intro-to-solana

Repository files navigation

intro-to-solana

如遇到 Windows 路徑問題可以用 ts-node 來取代 esrun!

  • Keypair

    • Public Key:可公開的 address。
    • Secret Key:用來簽署交易和驗證身份,不可公開。
  • Symmetric and Asymmetric Cryptography

    • Symmetric Cryptography 對稱加密:已有幾百年歷史,現在常見的有 AES。
    • Asymmetric Cryptography 非對稱加密:1970s 發展出來,有公私鑰形成密鑰對,現在常見的有 ECC(橢圓曲線)和 RSA。
      • Encryption:數據被公鑰加密,只有相對應的私鑰可以解密。(目的:保護數據隱私)
      • Signatures:使用私鑰簽名,公鑰可以用來驗證簽名者的身份。(目的:驗證真實性與完整性)
  • Solana 的 keypair 使用 Ed25519 curve。

Lab 1 - Keypair

  • 下載套件 npm install

  • 使用 @solana/web3.js 生成 Keypair npx esrun generate-keypair.ts

如何自訂自訂公鑰的前幾位元

  • 取得 Keypair npx esrun get-public-key.ts

secret key 請保管好,不要傳到任何地方!

  • SOL:Solana 的原生代幣,符號為 ◎,最小單位為 Lamport,為紀念分散式系統大師 Leslie Lamport。(1 SOL = 10^9 Lamports)
  • Addresses:用來識別不同的 Accounts,通常以 base-58 encoded string 的形式顯示,大部分的 Addresses 都是 Public Key。

Lab 2 - Check Balance

  • 取得指定 address 的 balance npx esrun check-balance.ts
  • 領取 devnet SOL
  • Transactions aka Tx
    • Atomic:只會 success or fail
    • Instructions aka Ix:Tx 裡面的每個步驟為 Ix,Ix 包含:
      • an array of accounts that will be read from and/or written to
      • the public key of the program to invoke
      • data passed to the program being invoked, structured as a byte array
  • 提交狀態一般 Tx 使用 "confirmed" 或者 "finalized"
    • "processed" 指的是交易已經被某個節點處理並寫入當前的狀態中(回滾機率高)
    • "confirmed" 指的是交易已經被網路上的節點驗證並寫入區塊(回滾機率低)
    • "finalized" 指的是交易已經被網路上的節點全面驗證並達到最終狀態(絕對不回滾)

Lab 3 - Create a Transfer Tx

  • 創建 Tx npx esrun create-tx.ts
  • Solana Explorer 查看 Tx(記得切換到 devnet!)
  • 剛剛是透過 SystemProgram.transfer() 現成 Ix,如果要自己寫呢?
    const instruction = new TransactionInstruction({
      programId: PublicKey;
      keys: [
        {
          pubkey: PublicKey,
          isSigner: boolean,
          isWritable: boolean,
        },
      ],
      data?: Buffer;
    });
    
    • programId:要調用的 program 的 ID。
    • keys:指定會使用到的一個 array of accounts,每個 account 中包含:
      • pubkey
      • isSigner (boolean):是否為 signer
      • isWritable (boolean):是否可以在交易執行中被修改
    • data (optional):用來傳參數或數據的欄位,通常是以位元組(Buffer)的形式傳遞。

Lab 4 - Ping Progarm

  • Devnet 上有一個計數 program id 為 ChT1B39WKLS8qUrkLvFDXMhEJ4F1XZzwUNHUt4AU9aVa,並在 Ah9K7dQ8EHaZqcAsgBW8w37yN2eAy3koFmUn4x3CJtod 這個 account 存了資料。
  • 發送 Tx 與合約互動 npx esrun ping-program.ts

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published