casperlabs維護@casperlabs/contract以允許開發人員使用assemblyscript建立智慧合約。程式包源位於主casperlabs儲存庫中。
安裝
對於每個智慧合約,有必要建立一個專案目錄並對其進行初始化。
mkdir project
cd project
npm init
該過程提示有關專案的各種詳細資訊;您可以按照自己的意願回答問題,但可以放心地預設所有設定,除非應遵循的約定 。npm initnameyour-contract-name
然後在專案目錄中安裝程式集指令碼和此程式包。
npm install --save-dev [email protected]
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
作者鄭重申明:截至發文時,作者與文中提及專案皆不存在任何利益關係。