
CasperLabs维护@casperlabs/contract以允许开发人员使用AssemblyScript创建智能合约。程序包源位于主CasperLabs存储库中。
安装
对于每个智能合约,有必要创建一个项目目录并对其进行初始化。
mkdir project
cd project
npm init
该过程提示有关项目的各种详细信息;您可以按照自己的意愿回答问题,但可以放心地默认所有设置,除非应遵循的约定 。npm initnameyour-contract-name
然后在项目目录中安装程序集脚本和此程序包。
npm install --save-dev assemblyscript@0.9.1
npm install --save @casperlabs/contract
合约API文档
可以在https://www.npmjs.com/package/@casperlabs/contract上找到Assemblyscript合同API文档。
用法
将汇编脚本的脚本条目添加到项目的package.json;请注意,合同名称用于wasm文件的名称。
{
"name": "your-contract-name",
...
"scripts": {
"asbuild:optimized": "asc assembly/index.ts -b dist/your-contract-name.wasm --validate --optimize --use abort=",
"asbuild": "npm run asbuild:optimized",
...
},
...
}
在项目根目录中,创建一个index.js包含以下内容的文件:
const fs = require("fs");
const compiled = new WebAssembly.Module(fs.readFileSync(__dirname + "/dist/your-contract-name.wasm"));
const imports = {
env: {
abort(_msg, _file, line, column) {
console.error("abort called at index.ts:" + line + ":" + column);
}
}
};
Object.defineProperty(module, "exports", {
get: () => new WebAssembly.Instance(compiled, imports).exports
});
assembly/tsconfig.json通过以下方式创建文件:
{
"extends": "../node_modules/assemblyscript/std/assembly.json",
"include": [
"./**/*.ts"
]
}
智能合约示例
创建一个assembly/index.ts文件。这是合同代码必须去的地方。
您可以使用以下示例代码段演示一个非常简单的智能合约,该合约可以立即返回错误,如果在CasperLabs平台上执行该合约,则会将一条消息写入块中。
//@ts-nocheck
import {Error, ErrorCode} from "@casperlabs/contract/error";
// simplest possible feedback loop
export function call(): void {
Error.fromErrorCode(ErrorCode.None).revert(); // ErrorCode: 1
}
如果您喜欢更复杂的第一份合同,可以在CasperLabs github存储库中查看示例合同以获取启发。
编译到WASM
要将合同编译为wasm,请使用npm从项目根目录运行asbuild脚本。
npm run asbuild
如果构建成功,则dist根文件夹中将存在一个文件夹,该文件夹应位于your-contract-name.wasm

作者郑重申明:截至发文时,作者与文中提及项目皆不存在任何利益关系。
网友评论