跳到主要内容

通过合约创建合约

一个去中心化应用程序的业务逻辑可能需要程序(智能合约)有可能在网络中创建、初始化和启动一个或几个其他程序。当外部各方(用户)需要访问他们自己的典型智能合约的实例时,通过合约创建合约的需求是必要的。

我们以一个贷款功能的合约为例。在这种情况下,开发者可以创建一个工厂合约,该合约将按需创建贷款智能合约的实例并进行操作。

首先,要创建一个程序,必须使用 gear.uploadCode 将程序代码提交到网络并获取其代码哈希值。提交程序代码不会初始化程序。

信息

你可以通过 Gear IDEA 提交合约代码,也可以通过 @gear-js/api SDK 提交。 甚至也可以通过 Gear Program 命令行提交 —— https://github.com/gear-tech/gear/tree/master/gcli。

代码提交后,可以用来创建一个新的合约:

use gstd::{prog::ProgramGenerator, CodeHash, msg};

#[no_mangle]
extern "C" fn handle() {
let submitted_code: CodeHash =
hex_literal::hex!("abf3746e72a6e8740bd9e12b879fbdd59e052cb390f116454e9116c22021ae4a")
.into();

// ProgramGenerator returs ProgramId

let program_id = ProgramGenerator::create_program_with_gas(submitted_code, b"payload", 10_000_000_000, 0).unwrap();

msg::send(program_id, b"hello", 0).expect("Unable to send message");

}

更多 gstd::prog 相关的内容,请看 https://docs.gear.rs/gstd/prog/index.html