如遇到 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。
-
下載套件
npm install
-
使用
@solana/web3.js
生成 Keypairnpx 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。
- 取得指定 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" 指的是交易已經被網路上的節點全面驗證並達到最終狀態(絕對不回滾)
- 創建 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)的形式傳遞。
- Devnet 上有一個計數 program id 為
ChT1B39WKLS8qUrkLvFDXMhEJ4F1XZzwUNHUt4AU9aVa
,並在Ah9K7dQ8EHaZqcAsgBW8w37yN2eAy3koFmUn4x3CJtod
這個 account 存了資料。 - 發送 Tx 與合約互動
npx esrun ping-program.ts