标签: solidity

字符串数组稳固

我遇到了一个相当普遍的问题,似乎我无法优雅而有效地解决问题.

我要将一个任意长的任意长字符串数组传递给一个可靠的契约.

在我看来它应该是这样的

function setStrings(string [] row)
Run Code Online (Sandbox Code Playgroud)

但似乎无法做到.

我怎么解决这个问题?

ethereum solidity eris

9
推荐指数
2
解决办法
1万
查看次数

web3 websocket连接可防止节点进程退出

我有一个节点js进程,它创建一个web3 websocket连接,如下所示:

web3 = new Web3('ws://localhost:7545')
Run Code Online (Sandbox Code Playgroud)

当进程完成时(我发送一个SIGTERM),它不会退出,而是永远挂起而没有控制台输出.

我注册了SIGINT和SIGTERM一个听众在什么处理过程中具有突出以观察process._getActiveRequests()process._getActiveHandles(),我看到以下内容:

 Socket {
    connecting: false,
    _hadError: false,
    _handle: 
     TCP {
       reading: true,
       owner: [Circular],
       onread: [Function: onread],
       onconnection: null,
       writeQueueSize: 0 },
    <snip>
    _peername: { address: '127.0.0.1', family: 'IPv4', port: 7545 },
    <snip>
}
Run Code Online (Sandbox Code Playgroud)

为了完整性,这里是监听信号的代码:

async function stop() {
  console.log('Shutting down...')

  if (process.env.DEBUG) console.log(process._getActiveHandles())

  process.exit(0)
}

process.on('SIGTERM', async () => {
  console.log('Received SIGTERM')
  await stop()
})

process.on('SIGINT', async () => {
  console.log('Received SIGINT')
  await stop()
})
Run Code Online (Sandbox Code Playgroud)

看起来web3正在打开一个套接字,这是有道理的,因为我从未告诉它关闭连接.通过文档和谷歌搜索,它看起来不像web3对象的close或end方法.

手动关闭stop …

javascript websocket ethereum solidity web3-donotuse

9
推荐指数
1
解决办法
1003
查看次数

在结合度 - 气体效率中的遗传组成

在OOP语言中,继承的组合是众所周知的最佳实践.Solidity也是一种OOP语言,但也存在气体效率问题.

问题是,在Solidity中,考虑到各自的天然气成本,组成和继承如何相互比较?

oop performance inheritance composition solidity

9
推荐指数
1
解决办法
289
查看次数

npm solc:AssertionError [ERR_ASSERTION]:指定了无效的回调

我正在尝试使用npm solc编译可靠性智能合约.我试着遵循不同的例子.链接到示例:https://medium.com/coinmonks/how-to-compile-a-solidity-smart-contract-using-node-js-51ea7c6bf440

我编写了如下代码:

const path = require('path');
const fs = require('fs');
const solc = require('solc');



const helloPath = path.resolve(__dirname, 'contracts', 'hello.sol');
console.log("First" + helloPath);
const source = fs.readFileSync(helloPath, 'UTF-8');
console.log("Second" + source);
console.log(solc.compile(source, 1));
Run Code Online (Sandbox Code Playgroud)

运行上面的代码时出现以下错误.

AssertionError [ERR_ASSERTION]: Invalid callback specified.
    at wrapCallback (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:16:5)
    at runWithReadCallback (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:37:42)
    at compileStandard (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:78:14)
    at Object.compileStandardWrapper (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:85:14)
    at Object.<anonymous> (C:\Users\mouazzamj058\solc_example\example.js:4:19)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
Run Code Online (Sandbox Code Playgroud)

请帮忙.

node.js npm ethereum solidity

9
推荐指数
3
解决办法
3779
查看次数

如何获取 Ethers.js 响应数据

坚固性:

function ping() public view returns ( uint ) {
    return 999999999;
}
function ping2() public returns ( uint ) {
    return 999999999;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript Ethers.js:

(await contract.ping()).toString();  //-> 999999999  ( correct ) 
(await contract.ping2()).toString(); //-> [object Object] ( ?? )
Run Code Online (Sandbox Code Playgroud)

为什么 ping2 返回 [Object Object] ?如何获取 ping2 的数据?

还:

(await contract.sendTransaction(txObj)).toString(); //-> [object Object] ( ?? )
Run Code Online (Sandbox Code Playgroud)

为什么使用 sendTransaction 还返回 [object Object] ?

javascript solidity ethers.js

9
推荐指数
2
解决办法
1万
查看次数

使用导入的 OpenZeppelin 文件在 Etherscan 上验证并发布合约

我目前正在构建符合 ERC721 标准的合约,并已在此处发布合约: https: //ropsten.etherscan.io/address/0xa513bc0a0d3af384fefcd8bbc1cc0c9763307c39 - 我现在正在尝试验证并发布合约源代码

我的文件的开头如下所示:

// SPDX-License-Identifier: MIT

// We will be using Solidity version 0.8.4
pragma solidity 0.8.4;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract ViperToken is ERC721 {
Run Code Online (Sandbox Code Playgroud)

但是,当尝试使用 Solidity 单个文件进行验证和发布时,出现以下错误:

ParserError: Source "@openzeppelin/contracts/token/ERC721/ERC721.sol" not found: File import callback not supported
 --> myc:6:1:
  |
6 | import "@openzeppelin/contracts/token/ERC721/ERC721.sol"
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我指出 1. 解决此问题或 2. 有关如何正确编写导入了可以使用 Etherscan 验证的依赖项的合约的文档。现在这只是一个单文件合同。

ethereum solidity smartcontracts cryptocurrency etherscan

9
推荐指数
2
解决办法
7258
查看次数

每 x 时间后运行 Solidity 代码

我正在创建一个开发应用程序,例如每隔 5 分钟就想从我的 erc20 代币的智能合约中运行一些代码。在 Solidity 中,如何每 5 分钟调用该函数一次?

solidity erc20

9
推荐指数
1
解决办法
8080
查看次数

如何计算硬度百分比

    function splitAmount(uint256 amount) private {
        a1.transfer(amount.div(2));
        a2.transfer(amount.div(2));
    }
Run Code Online (Sandbox Code Playgroud)

我看过其他关于此的主题,但我觉得事情过于复杂。使用此代码,金额除以 2 后在 a1 和 a2 之间平均分配。

如何使用相同的代码执行 80/20 拆分之类的操作?

ethereum solidity

9
推荐指数
1
解决办法
1万
查看次数

如何从我的合约中提取所有代币

我创建了一个基本合同。但不知道提现功能。

我尝试创建一个基本功能,但它不起作用

function withdraw() public {
    msg.sender.transfer(address(this).balance);
}
Run Code Online (Sandbox Code Playgroud)

blockchain ethereum solidity smartcontracts erc20

9
推荐指数
1
解决办法
3万
查看次数

以太坊的分工

我正在创建一个签发合同的合同.我想要一个持有令牌的帐户,以便能够检查他们拥有的所有令牌的百分比.我知道以太坊还没有实现浮点数.我该怎么办?

ethereum solidity

8
推荐指数
1
解决办法
7176
查看次数