Patract 重要里程碑:Redspot v0.4完成主要开发计划
Redspot v0.4 的新增功能
Redspot 多合约编译
export default {
...
contract: {
ink: {
toolchain: "nightly",
sources: ["contracts/**/*"],
},
},
...
};
solang 也是类似的配置:
...export default {
...
contract: {
ink: {
toolchain: "nightly",
sources: ["contracts/**/*"],
},
solang: {
sources: ['contracts/**/*.sol']
}
},
...
};
ink! 和 solang 可以同时存在,Redspot 对 ink! 合约使用 cargo-contract,对 solang 合约使用 solang 编译器编译。将来我们也会对其他编译器提供支持。
所有的编译产物能够在 artifacts (或者用户自己配置的目录)下找到:
-- artifacts-- erc20.contract
-- erc20.json
redspot/examples/multi-contract
目录。然后你需要确保你已安装 cargo-contract[4]和 solang[5]。Redspot 不会自动安装他们。
artifacts
目录下找到,然后我们删除artifacts
文件夹。运行命令:artifacts
文件夹,只有 ERC20 合约的编译产物。Redspot known types
我们已经将这个插件默认加入模版,用户无需进行额外配置。如果需要手动添加这个插件,首先安装依赖:
redspot.config
文件中,引入插件:import "@redspot/known-types"
...
export default {
...
};
// import "@redspot/known-types"
...
export default {
...
networks: {
development: {
endpoint: "wss://ws.jupiter-poa.patract.cn/",
},
types: {},
...
}
...
};
{
nonce: '0',
consumers: '1',
providers: '1',
sufficients: '4,106,261,181',
data: {
free: '23.2834 mDOT',
reserved: '0',
miscFrozen: '0',
feeFrozen: '0'
}
}
import "@redspot/known-types"
...
export default {
...
networks: {
development: {
endpoint: "wss://ws.jupiter-poa.patract.cn/",
},
types: {},
...
}
...
};
nonce: '0',
consumers: '1',
providers: '1',
data: {
free: '100.0016 MDOT',
reserved: '0',
miscFrozen: '0',
feeFrozen: '0'
}
}
Redspot docker
export default {
...
contract: {
ink: {
toolchain: "nightly",
docker: true,
sources: ["contracts/**/*"],
},
},
...
docker: {
sudo: false,
},
...
};
注意:当使用docker编译时,可能受网络环境影响(比如中国大陆需要vpn代理),会导致编译时间过长, 如果中途使用 ctrl+c 退出当前编译命令,docker容器并不会自动停止删除。
现在会默认使用 docker 编译。如果想更改默认行为,请添加 --docker false 参数:
$ npx redspot compile --docker false
redspot.config
文件中的 docker.sudo
改为 true。这样将会使用 sudo 运行 docker。Redspot explorer
使用 redspot explorer 需要先安装 @redspot/explorer
插件:
import "@redspot/explorer";
...
http://127.0.0.1:8011
const { getContractFactory } = patract;
const { api } = network;
async function run() {
await api.isReady;
const signer = "<your address>";
const contractFactory = await getContractFactory("erc20", signer);
const balance = await api.query.system.account(signer);
console.log("Balance: ", balance.toHuman());
const contract = await contractFactory.deployed("new", "1000000", {
gasLimit: "200000000000",
value: "100000000000",
});
await contract.tx.transfer(signer, 7);
console.log("");
console.log(
"Deploy successfully. The contract address: ",
contract.address.toString()
);
api.disconnect();
}
run().catch((err) => {
console.log(err);
});
$ npx redspot run ./scripts/deploy.ts
, 然后此时会调用 Polkadot extension 进行签名。检查你的浏览器里面的 Polkadot extension (注意 explorer 页面必须是打开的)。然后部署合约。然后部署成功后,检查 explorer 页面:
这里会自动出现本地编译好的合约的 code。然后检查 contracts 的 contracts 页面:
我们点击 compile contract ,出现此提示表示编译成功:
npx redspot explorer
命令的终端,查看日志提示。@redspot/decimals
@redspot/decimals
是一个自动转换数字精度的插件,例如将1 DOT
转换为10000000000
。1 DOT
=>10 ** 10
1 KSM
=>10 ** 12
自动获取链的 tokenDecimal
1 UNIT
=>10 ** tokenDecimal
Install:
redspot.config.ts
:gasLimit: '400000000000',
value: '10000 UNIT'
});
const { api } = network;
async function run() {
await api.isReady;
api.tx.balances.transfer(address, '1 UNIT')
}
@polkadot/api
实现了自己的一套类型系统,因此,我们对Weight
和Balance
进行了重写,以达到可以识别类似1 DOT
的功能。如果使用的功能不是Weight
和Balance
的类型,以上方法就不会生效。如何验证 Redspot v0.4 Github 库
当前我们支持任意数量的 ink! 合约和 solang 合约混合编译。只需要设定好需要编译的目录即可。参考 Redspot 多合约编译。
我们创建了一个 docker image 用于编译合约和启动测试网https://hub.docker.com/r/redspot/contract ,并且集成到了 Redspot 中。
Redspot's 网站界面: 使用 @redspot/explorer 插件。
Redspot explorer 能够显示 Redspot 中配置的网络。自动上传了本地目录中的合约 abi 文件。将会展示所有与当前 abi 文件相关联的合约。
Redspot explorer 能够查询当前的合约相关的交易(类型 Polkadot apps explorer)。对 Europa,Redspot 会扫描所有区块。
在 Redspot explorer 中,会自动解析所有能够查询到 abi 的合约的 message 和 event 信息。在区块详情中可以查看。
Redspot explorer 中提供一个 console 功能,它能将代码发送本地执行。并且我们也添加了一个编译合约的按钮。可以让用户能够直接在 Redspot explorer 上执行执行编译命令。
当开启 Redspot explorer 服务时,在本地需要签名的时候,可以通过 Redspot explorer gui 间接的访问到 Polkadot extensions。从而实现这个功能。
其他插件
使用 @redspot/watcher 插件可以保存 rust 和 toml 文件信息,如何没有更改,在执行 test run console 命令时,会跳过默认的编译。
我们当前为 Europa, Jupiter,Canvas,Edgeware, Plasm,Clover 等添加了 types。在使用这几条链的时候无需再手动配置 types。其中 Canvas,Edgeware,Plasm,Clover 是通过 @polkadot/app-config 获取到 types 的,所以类型的正确性依赖于他们提交的配置。而 Europa,Jupiter 我们会手动维护类型。
使用 @redspot/decimals 可以实现这个功能。
[1]Redspot v0.1 的国库提案#0链接:
https://polkadot.polkassembly.io/treasury/0
[2]Redspot v0.4的国库提案#44链接:
https://polkadot.polkassembly.io/treasury/44
[3]额外的脚本链接:
https://github.com/paritytech/ink/blob/master/examples/delegator/build-all.sh
[4] cargo-contract链接:
https://github.com/paritytech/cargo-contract
[5] solang链接: