neo-devpack-solidity 0.22.0

Production-focused Solidity-to-NeoVM compilation system
Documentation
#[test]
fn deploy_stub_is_injected_for_constructor() {
    let source = r#"
    pragma solidity ^0.8.19;

    contract WithConstructor {
        uint256 public value;

        constructor() {
            value = 1;
        }
    }
    "#;

    let mut metadata = analyse_source(source).expect("analysis failed");
    ensure_deploy_stub(&mut metadata).expect("deploy stub");

    let deploy = metadata
        .methods
        .iter()
        .find(|method| method.name == "_deploy")
        .expect("_deploy should exist");

    assert_eq!(
        deploy.parameters.len(),
        2,
        "expected (data, update) parameters"
    );
    assert!(deploy.return_parameters.is_empty());
}

#[test]
fn constructor_with_parameters_is_supported() {
    let source = r#"
    pragma solidity ^0.8.19;

    contract NeedsArgs {
        uint256 public value;

        constructor(uint256 initialValue) {
            value = initialValue;
        }
    }
    "#;

    let mut metadata = analyse_source(source).expect("analysis failed");
    ensure_deploy_stub(&mut metadata).expect("deploy stub");

    assert!(
        metadata.methods.iter().any(|m| m.name == "_deploy"),
        "_deploy should be injected for parameterised constructor"
    );
}