Skip to content

sprout-echo/solana-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

助记词 私钥 地址

助记词 -> 私钥 -> 地址

Solana 区块链上的每个公共地址都使用长度介于 32 到 44 个字符之间的字符串
私钥无法派生出自己的助记词,这也是一种单向关系,也是区块链加密完整性的关键。

  1. bip39 单个钱包
  2. bip44 多个钱包,也叫HD钱包
    派生路径(m/44'/501'/0'/0')
    m/<PURPOSE>/<COIN_TYPE>/<ACCOUNT>/<CHANGE>
  • m 表示跟密钥/主密钥
  • m 之后的每个其他元素都应该是零或正整数
  • 允许从同一私钥派生多个公钥,账户从索引0开始按顺序递增的方式编号
  • 最后一位 0表示外部链 1表示内部链

交易

交易包括两部分

  1. 签名(64字节)
    任何交易,只要针对一个账户扣除SOL,或者修改其中的数据,都需要这个账户拥有者的签名
  2. 消息(32字节)
    消息结构包括:
  • 消息头
  • 账户地址
  • 最新的 blockhash,可以通过 getLatestBlockhash RPC方法获取
    • 提交之前,每个交易需要引用一个recent blockhash(最新块哈希)。 块哈希被用于去重,以及移除过期交易
  • 指令(一个交易可以包含多个指令,运行库会自动按顺序处理这些指令)
    • keys: 包括每个指令所需的账户元数据
      • pubkey: 账户的链上数据
      • is_signer: 指定帐户是否在交易中作为签名者
      • is_writable: 指定帐户数据是否被修改
    • programId: 程序地址
    • data 指令数据,作为字节缓冲区
image
// 示例交易结构
"transaction": {
    "message": {
      "header": {
        "numReadonlySignedAccounts": 0,
        "numReadonlyUnsignedAccounts": 1,
        "numRequiredSignatures": 1
      },
      "accountKeys": [
        "3z9vL1zjN6qyAFHhHQdWYRTFAcy69pJydkZmSFBKHg1R",
        "5snoUseZG8s8CDFHrXY2ZHaCrJYsW457piktDmhyb5Jd",
        "11111111111111111111111111111111"
      ],
      "recentBlockhash": "DzfXchZJoLMG3cNftcf2sw7qatkkuwQf4xH15N5wkKAb",
      "instructions": [
        {
          "accounts": [
            0,
            1
          ],
          "data": "3Bxs4NN8M2Yn4TLb",
          "programIdIndex": 2,
          "stackHeight": null
        }
      ],
      "indexToProgramIds": {}
    },
    "signatures": [
      "5LrcE2f6uvydKRquEJ8xp19heGxSvqsVbcqUeFoiWbXe8JNip7ftPQNTAVPyTK7ijVdpkzmKKaAQR7MWMmujAhXD"
    ]
  }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors