neo-devpack-solidity 0.22.0

Production-focused Solidity-to-NeoVM compilation system
Documentation
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/**
 * @title TypeCastingShowcase
 * @notice Demonstrates explicit casts (uint8→uint256, address→uint160),
 *         bytes conversions, and abi.encode/decode patterns.
 */
contract TypeCastingShowcase {
    function widenUint(uint8 small) public pure returns (uint256) {
        return uint256(small);
    }

    function narrowUint(uint256 big) public pure returns (uint8) {
        require(big <= 255, "overflow");
        return uint8(big);
    }

    function addressToUint(address addr) public pure returns (uint160) {
        return uint160(addr);
    }

    function uintToAddress(uint160 val) public pure returns (address) {
        return address(val);
    }

    function bytesToUint(bytes32 data) public pure returns (uint256) {
        return uint256(data);
    }

    function uintToBytes(uint256 val) public pure returns (bytes32) {
        return bytes32(val);
    }

    function encodeValues(
        uint256 a,
        address b,
        string memory c
    ) public pure returns (bytes memory) {
        return abi.encode(a, b, c);
    }

    function decodeValues(bytes memory data)
        public
        pure
        returns (uint256, address, string memory)
    {
        (uint256 a, address b, string memory c) = abi.decode(data, (uint256, address, string));
        return (a, b, c);
    }

    function signedCast(int256 signed) public pure returns (uint256) {
        require(signed >= 0, "negative");
        return uint256(signed);
    }
}