contract-transcode 0.1.0

Library encoding calls for smart contracts on substrate
Documentation

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 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"))
    }
}