Solana 前端开发基本框架指南

1,202 阅读2分钟

简介

一切皆

==Account==

合约是Account, 数据是Account, 账户Account

Account之间互相操作,就是一个系统。

在实际的操作过程,其实我们只需要读跟写。所以会分开这两大类型讲

ETH的实现

我们可以先看eth是怎么做的。

eth的话,就很简单实现,比如下面有如下合约代码。

Contrct Test{
    string name;
    function setName(string _name) public {
        name = _name;
    }
    function getName() public returns(string) {
        return name;
    }
}

js获取的话

contrct.getName().call()

如果对eth js不熟悉,看这里web3小白实战指导

Solana的区别

在上面中,我们是可以从合约里面读取的,也就是读和写,没多大区别。但是在Solana上面比这个纯粹,数据是在account上的,一切都是account,所以我们直接读account的信息就好了。

既然是account,我们读取就行了,但是读取之前,我们需要先得到这个account的地址。下面就说怎么得到account的address。

我们可以使用PDA来计算address

PDA

get pad address

const pubkey = await findProgramAddress([
    TOKEN_PROGRAM_ID.toBuffer(), // pubkey
    Buffer.from('string'), // string to buffer
])[0]

获取数据

既然拿到地址,我们就可以根据地址获取数据了。获取数据的方式如下。

rpc getAccountInfo

这个是rpc方法,其实用solana-web3库是封装好的。

拿到之后解析即可。怎么解析我看上一个文章 获取各种account数据的方式

schema怎么写,看这个条件查询

    部分不知道怎么操作的,可以看metaplex代码(nft开源项目)

读完了,就是写

操作(写)

一个合约的一次操作,是一个指令。

一次发起可以有多个指令,多个指令组合成一个交易。

总指令大小不能超过1232字节

指令里面有data跟accounts。

data编码和解码方式基本一样。

accounts也叫keys.

instructions.push( 
new TransactionInstruction({ 
    keys, 
    programId: toPublicKey(stringPubkey), 
    data, 
 })
)

交易需要对需要签名的进行传入keypair(pubkey, priviKey)

怎么构建交易,如下

 const instructions: TransactionInstruction[] = [];
 const transaction = new Transaction();
  instructions.forEach(instruction => {
    transaction.add(instruction);
  });
  transaction.recentBlockhash = (
    await connection.getRecentBlockhash('max')
  ).blockhash;
  transaction.feePayer = payerPublicKey;
  const signedTransaction = await wallet.signTransaction(transaction);
  const tx = await connection.sendRawTransaction(
    signedTransaction.serialize(),
  );

完整案例,看我上一篇 sol转账

后言

其他的都是业务了,以及标准了,比如token标准,nft标准。以及ar上传等。但是都是基于上面的基础衍生的。

祝大家开发顺利。

--完--