Contract

因内容为空,暂无法提供包含关键信息的摘要。
var Web3= require("web3")
const path = require('path');
const fs = require('fs');
var contract = require("truffle-contract");
App = {
    web3Provider: null,
    contracts: {},

    init: async function() {


        return await App.initWeb3();
    },

    initWeb3: async function() {

        App.web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
        web3 = new Web3(App.web3Provider);

        return App.initContract();
    },

    initContract: function() {

        const contractPath = path.resolve(__dirname, './build/contracts/Adoption.json');


            // Get the necessary contract artifact file and instantiate it with truffle-contract
            const {abi,bytecode} = require(contractPath);

        const myContract = new web3.eth.Contract(abi,'0xDB311d10bA37e994d9b12a9d2f381Bc220aA6fdF',
            {
                from: '0xE8DFF694ce99856da7d88e5569ebd02F97931816', // default from address
            });

            // Set the provider for our contract
        myContract.setProvider(App.web3Provider);


        function getSomething() {
            return "something";
        }

        async function testAsync() {
            return Promise.resolve("hello async");
        }

        async function test() {
            const v1 = await myContract.methods.adopt(1).send({from: '0xE8DFF694ce99856da7d88e5569ebd02F97931816',
                gas: "220000"}, (error, transactionHash) => {
                console.log(transactionHash)
            });
            myContract.methods.getAdopters().call().then(console.log);
        }
        test()



    }



};
App.init();
在 Kotlin 中,**`contract` 与泛型**结合使用时,可以进一步增强编译器对泛型函数行为的理解,特别是在处理空安全、类型推断和控制流分析时,可以显著提升代码的可读性和安全性。 --- ## ✅ `contract` 与泛型函数结合的使用方式 Kotlin 的 `contract` 可以用于泛型函数中,但需要满足以下条件: 1. **必须是 `inline` 函数**。 2. 泛型参数必须在 `contract` 中明确使用。 3. 使用 `contract` 的 DSL 来描述函数行为。 --- ## ✅ 示例 1:结合泛型与 `ensures` 契约 ```kotlin inline fun <T> T?.requireNotNullWithContract(): T { contract { returns() implies (this@requireNotNullWithContract != null) } if (this == null) throw IllegalStateException("Value is null") return this } ``` 在这个泛型函数中,我们告诉编译器:如果函数返回了,那么 `this` 一定不是 `null`。 ```kotlin fun example(value: String?) { val safeValue = value.requireNotNullWithContract() println(safeValue.length) // 编译器知道 safeValue 非空 } ``` --- ## ✅ 示例 2:结合 `callsInPlace` 和泛型 lambda ```kotlin inline fun <T> T?.ifNotNull(block: (T) -> Unit) { contract { callsInPlace(block, InvocationKind.AT_MOST_ONCE) } if (this != null) { block(this) } } ``` 这个泛型扩展函数允许你安全地对非空值执行操作,并且编译器知道 `block` 最多执行一次。 ```kotlin fun example(name: String?) { name.ifNotNull { println(it.length) // it 被推断为非空 String } } ``` --- ## ✅ 示例 3:结合 `returns` 和泛型判断 ```kotlin inline fun <reified T> Any?.isInstanceOf(): Boolean { contract { returns(true) implies (this@isInstanceOf is T) } return this is T } ``` 在这个例子中,我们告诉编译器:如果函数返回 `true`,则 `this@isInstanceOf` 一定是 `T` 类型。 ```kotlin fun example(value: Any?) { if (value.isInstanceOf<String>()) { println(value.length) // 编译器知道 value 是 String 类型 } } ``` --- ## ✅ `contract` 在泛型中的限制 | 限制项 | 说明 | |--------|------| | **只能用于 `inline` 函数** | 否则无法使用 `contract` | | **泛型类型无法在 `contract` 中直接引用** | 必须通过 `this@function` 或参数引用 | | **不能用于 `suspend` 函数** | Kotlin 目前不支持协程函数的契约分析 | | **不能用于类或属性** | `contract` 只能用于函数 | --- ## ✅ 总结 | 特性 | 说明 | |------|------| | ✅ `contract` 可以用于泛型函数 | 提升类型推断和空安全分析 | | ✅ 常见用途 | `ensures`, `returns`, `callsInPlace` | | ❌ 限制 | 必须是 `inline`,不能用于协程、类、属性等 | | ✅ 推荐场景 | 泛型空安全检查、类型判断、高阶函数控制流分析 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值