Contract Transcode
Contains utilities for encoding smart contract calls to SCALE.
Currently part of cargo-contract, the build tool for smart
contracts written in ink!.
Example
use ContractMessageTranscoder;
Contains utilities for encoding smart contract calls to SCALE.
Currently part of cargo-contract, the build tool for smart
contracts written in ink!.
use transcode::ContractMessageTranscoder;
fn main() {
let metadata_path = "/path/to/metadata.json";
let metadata = load_metadata(&metadata_path.into())?;
let transcoder = ContractMessageTranscoder::new(&metadata);
let constructor = "new";
let args = ["foo", "bar"];
let data = transcoder.encode(&constructor, &args).unwrap();
println!("Encoded constructor data {:?}", data);
}
fn load_metadata(path: &Path) -> anyhow::Result<ink_metadata::InkProject> {
let file = File::open(&path).expect("Failed to open metadata file");
let metadata: ContractMetadata =
serde_json::from_reader(file).expect("Failed to deserialize metadata file");
let ink_metadata = serde_json::from_value(serde_json::Value::Object(metadata.abi))
.expect("Failed to deserialize ink project metadata");
if let ink_metadata::MetadataVersioned::V3(ink_project) = ink_metadata {
Ok(ink_project)
} else {
Err(anyhow!("Unsupported ink metadata version. Expected V3"))
}
}