Blockchain 仅使用EVM API在区块链上部署智能合约,而不使用geth、tuffle或ganache?

Blockchain 仅使用EVM API在区块链上部署智能合约,而不使用geth、tuffle或ganache?,blockchain,ethereum,solidity,smartcontracts,web3js,Blockchain,Ethereum,Solidity,Smartcontracts,Web3js,我已经使用node js for IoT用例实现了我的个人区块链,因此我现在想在不使用geth、tuffle、ganache、Remix或web3.js的情况下将智能合约代码部署到此区块链中,因此我的目标是使用EVM API来编译和执行智能合约。 那么,如何呢?您可以查看合同ABI规范 跟随 合同应用程序二进制接口(ABI)是 从外部与以太坊生态系统中的合同互动 区块链和合同之间的互动。数据是 根据其类型进行编码,如本规范所述。这个 编码不是自描述的,因此需要一个模式来 解码 而且 要与以太坊集

我已经使用node js for IoT用例实现了我的个人区块链,因此我现在想在不使用geth、tuffle、ganache、Remix或web3.js的情况下将智能合约代码部署到此区块链中,因此我的目标是使用
EVM API
来编译和执行智能合约。
那么,如何呢?

您可以查看合同ABI规范

跟随

合同应用程序二进制接口(ABI)是 从外部与以太坊生态系统中的合同互动 区块链和合同之间的互动。数据是 根据其类型进行编码,如本规范所述。这个 编码不是自描述的,因此需要一个模式来 解码

而且

要与以太坊集成,需要一个以太坊客户端节点,如启用RPC/IPC的
Geth、奇偶校验
quorum

如果您只想从合同中检索现有数据,或从以太坊公共链发送离线签名交易,则只需使用公共节点,如
Infura
,而无需安装本地客户端,如Parity或Geth

对于智能合约开发,您还可以安装
testrpc
,它将在内存中创建一个没有块菌或甘纳切的网络

testrpc是一个基于Node.js的以太坊客户端,用于测试和 发展。它使用以太坊JS模拟完整的客户端行为和 使开发以太坊应用程序更快。它还包括 所有流行的RPC函数和功能(如事件)都可以运行 果断地使发展变得轻而易举

有关testrpc的更多详细信息,请参见

安装testrpc的步骤

npm install -g ethereumjs-testrpc
注意

ganachecli是TestRPC的最新版本:一个快速且可定制的 区块链模拟器。它允许您调用区块链 没有运行实际以太坊节点的开销

安装ganachecli的步骤

npm install -g ganache-cli
步骤:-

  • 为物联网应用程序创建智能合约
  • 使用solc solidity compiler for nodejs编译合同
  • 从已编译的JS契约对象获取接口对象

    字节码字符串,它是 合同基本上是一套(某种)装配说明 供以太坊虚拟机执行

  • 将契约部署到testrpc网络

  • 详细的解决方案是否不使用块菌或甘纳切

    仅使用字节码部署

    另请参阅仅使用字节码进行部署:和

    编译您的合同(结果文件是/build/contracts/YourContract.json),然后在不使用松露的情况下部署:

    // Dependencies
    const Web3 = require('web3');
    const fs = require("fs");
    
    // Load Parameter
    let PROVIDER = ...
    let FROM_ACCOUNT = ...
    let FROM_PRIVATE_KEY = ...
    
    // Create web3 instance
    const web3 = new Web3(new Web3.providers.HttpProvider(PROVIDER), null, {transactionConfirmationBlocks: 1});
    
    // Deploy
    web3.eth.getTransactionCount(FROM_ACCOUNT)
        .catch(e => {
            console.log(e);
        })
        .then(txCount => {
    
            // construct the transaction data
            const txData = {
                nonce: web3.utils.toHex(txCount),
                from: FROM_ACCOUNT,
                data: JSON.parse(fs.readFileSync('./build/contracts/YourContract.json', 'utf8')).bytecode,
                gasLimit: web3.utils.toHex(7900000),
                gasPrice: web3.utils.toHex(web3.utils.toWei('12', 'gwei')),
            };
            console.log('nonce             : ' + txData.nonce);
            console.log('gasPrice          : ' + txData.gasPrice);
    
            // contract creation
            web3.eth.accounts.signTransaction(txData, FROM_PRIVATE_KEY).then(signed => {
                console.log('sign transaction  : OK');
    
                web3.eth.sendSignedTransaction(signed.rawTransaction)
                    .on("error", error => {
                        console.log('send transaction  : ' + error);
                        throw "DEPLOY FAILED";
                    })
                    .on("receipt", (receipt) => {
                        console.log('send transaction  : OK');
                        let contractAddress = (receipt.contractAddress === null) ? 'n.a.' : receipt.contractAddress;
                        console.log("CONTRACT_ADDRESS  : " + contractAddress);
                    });
                });
            });
        });
    

    依赖项web3 v1.2.1和fs v0.0.2

    感谢您的帮助,但目标是只使用EVM js,因为我实现了不同的区块链(我的区块链是针对物联网而非加密的。你需要编译合同并部署到网络。不需要任何工具或框架…工具让它变得简单…你可以为物联网创建智能合同…编译它并部署到网络…为此,网络应该启动并运行谢谢你我理解,但我想部署c契约在我自己的区块链上而不是在网络上你所说的你自己的网络是什么意思。以太坊支持私有区块链网络。因此你需要创建你自己的网络。然后在它上部署你的智能契约。我正在深入研究以太坊而不是使用以太坊(因此,请尝试由我存储智能合约,而不要使用以太网。不清楚您在问什么……您使用的是以太坊fork还是具有EVM功能的产品?您提到“实施了个人区块链”使用节点。除非您建立了对某些EVM解释器的支持,否则它将无法运行EVM字节码。如果您从节点连接到Geth或奇偶校验之类的东西,您可以直接部署字节码。您能澄清一下吗?如果您不运行节点,那么EVM从何而来?可能OP正在询问如何在OP运行时创建EVM解释器使用他自己的区块链我成功编译并生成字节码和ABI以及操作码,但我希望看到智能合约代码的结果!除此之外,我如何将此字节码更改为地址,并在询问地址时执行字节码。