1,Solana智能合约不存储任何状态信息(因为每一个智能合约都会在用户地址上产生一个合约账户),所有的数据都是存储在用户地址上的合约账户里面。这是Etherscan智能合约和Solana智能合约的最大区别
9,CPI和PDA概念说明:一个智能合约调用另一个智能合约这个操作叫CPI,但是调用另一个合约需要签名,所以我们需要用调用当前合约的发起者和当前合约一起可以生成一个没有私钥的地址,而这个地址可以在合约里面签名去调用另一个合约。这一整个操作我们叫PDA
二、安装Solana客户端,官方文档
$ export http_proxy=http://127.0.0.1:58591/
$ export https_proxy=http://127.0.0.1:58591/
# 注意:执行这个脚本可能需要代理
$ sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
# 验证Solana客户端是否安装成功
$ solana --version
# 测试智能合约代码
$ cargo test-bpf --manifest-path=./Cargo.toml
# 打包Solana智能合约程序
# --bpf-out-dir 指定打包后文件输出目录
$ cargo build-bpf --manifest-path=./Cargo.toml --bpf-out-dir=dist/program
# 清空Solana打包程序
$ cargo clean --manifest-path=./Cargo.toml && rm -rf ./dist
# 启动本地Solana伪集群
$ solana-test-validator
# 创建密钱包(就是部署智能合约的账户),钱包密钥对默认创建在 ~/.config/solana/id.json
# 指定密钥对存储路径示例: solana-keygen new -o /home/chiangfire/data-data/dev-tools/Solana/test-key/id.json
$ solana-keygen new
# 将Solana服务端设置成本地(或者使用:solana config set --url http://127.0.0.1:8899)
$ solana config set --url localhost
# 将Solana服务端设置成开发网络
$ solana config set --url devnet
# 将Solana服务端设置成测试网络
$ solana config set --url testnet
# 将Solana服务端设置成主网
$ solana config set --url mainnet-beta
# 获取Solana服务端配置
$ solana config get
# 指定Solana部署所使用的钱包账户(如果不指定会默认使用 ~/.config/solana/id.json)
$ solana config set -k ~/.config/solana/id.json
# 领取空投(注意:不领取的话账户里面没有钱)
$ solana airdrop 100
# 查看钱包余额
$ solana balance
# 部署智能合约(注意:/home/helloworld.so 是已经打包好的合约程序)
$ solana program deploy /home/helloworld.so
# 部署成功后的合约地址
Program Id: EjS5rkqgXAUWqhvUip9nWN9mmdRzKLxmsfoXnUggn7pM
# 当前命令行窗口使用代理
$ export http_proxy=http://127.0.0.1:58591/
$ export https_proxy=http://127.0.0.1:58591/
# 安装 AVM
$ cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
# 安装最新Anchor套件
$ avm install latest
# 使用最新Anchor套件
$ avm use latest
# 验证Anchor套件是否安装成功
$ anchor --version
# 如果前端要使用 Anchor的话需要安装一下插件
$ npm install -g mocha
$ npm install -g @project-serum/anchor
# 使用Anchor创建项目
$ anchor init "项目名称"
# 使用Anchor编译项目,编译完成以后在target/idl目录下会生成IDL json文件(类似于ABI)(注意:该命令需要在项目目录下执行)
$ anchor build
# 使用客户端JS代码测试链上程序(注意:这个测试代码是写在tests目录下的(具体可参考hw_06_anchor_simple项目))
# --skip-local-validator 表示不自动启动本地Solana伪集群
$ anchor test --skip-local-validator