Ethereum 稳健性:更改已发布的智能合约中变量的值
我试图改变区块链中合同中变量的值。我扣除了它的代码,是这样的: pragma solidity ^0.4.8; contract Trial { address public owner; address public person; uint initialEther; function Trial(address _person) payable { owner = msg.sender; person = _person;
我试图改变区块链中合同中变量的值。我扣除了它的代码,是这样的: pragma solidity ^0.4.8; contract Trial { address public owner; address public person; uint initialEther; function Trial(address _person) payable { owner = msg.sender; person = _person;
我正在尝试创建一个私人PoA以太坊网络,我已经使用摩登、罗普斯滕和林克比有一段时间了。我以前没有意识到网络节点的发现是通过连接到一些引导节点来实现的。这些节点是中心节点吗?因此,这不是一个很大的权力下放缺失吗 我的意思是,如果引导节点很少,并且设置在网络创建的开始,我们可以想象这些节点是欺诈性的(在指向欺诈性BC节点的意义上)。没有 提前感谢您的回复是的,引导节点是中心节点,主网络和测试网络是硬编码的 “eNoD://”协议包括公钥和这些节点的IP地址,所以您仍然有效地信任Ethunm基金会,但
当我点击remix.ethereum.org下的create时,我不明白智能合约到底去了哪里。例如,如果我选择注入的Web3,这应该将合同发布到ropsten测试网,对吗?那我怎么才能拿到合同呢?当我使用metamask时,它会在我使用web3.js时为我注入正确的提供者,但是如果我不想使用注入的web3,而是在web3.js中手动选择提供者地址,那么我现在如何才能找到这个契约呢?我可以通过这种方式访问智能合约吗 编辑:我不知道我的问题有什么不对。我真的没有发现如何连接到智能合约,例如在没有注入
我正在尝试验证以太坊交易 以下是我的步骤。 1.进行交易 2.使用eth.getTransaction()获取事务 3.使用ethereumjs tx重新创建事务 但有时我无法验证交易 案例1:私有测试网上的简单发送以太事务 获取事务详细信息 { blockHash: "0x2125539ac67b4569828737ffb1731048e00121954f0555d0dc96af665071a62b", blockNumber: 24615, from: "0x81c24515cd
我们正在尝试构建一个dapp来共享和显示分类广告。分类广告正在智能合约中。连接元掩码帐户的用户可以显示添加。但我们想把它们展示给每个人。有什么办法吗 感谢您的回复。解决方案可以是创建一个服务器端应用程序,该应用程序将使用自己的密钥连接到智能合约,并向所有用户公开数据。解决方案可以是创建一个服务器端应用程序,该应用程序将使用自己的密钥连接到智能合约,并向所有用户公开数据。
有一个合同叫做投票。sol和it可以接受提案并对这些提案进行表决 我希望当人们创建提案时,能够指定投票结束后将发生的呼叫 调用应该具有要调用的契约、要调用的函数以及要传递给函数的参数的地址 然而,我们在创建投票时不知道这些(也不知道将被称为ABI的合同)。sol仅在我们稍后创建提案时使用 有什么方法可以做到这一点吗?您可以提前创建代理合约,在Vol.sol中固定其地址,然后通过此代理合约传输您需要的智能合约的地址。 除了通过代理传输地址外,还可以传输ABI规范。如果使用字节数组32将参数传递给V
我正在尝试遍历块并获取它们的事务信息,如下所示: var endOfLoop = app.web3.eth.blockNumber; var latestBlockNumberInDb = 1; for (var i = latestBlockNumberInDb; i <= endOfLoop; i++) { var block = app.web3.eth.getBlock(i, true); console.log(i); if
在web3提供程序(localhost:8545)上运行时出错 所以我的答案如下 我在本地运行geth,我提供了一些连接remix和testnet的选项 $ geth —testnet —rpc —rpcapi “db, net, web3, personal” —rpccorsdomain “https://remix.ethereum.org” console 我给了-rpccorsdomain,因为混音是在https上的 无论如何,请检查remix IDE中运行选项卡上的“web3 pr
我一直在四处寻找如何从以太坊合同中提取资金,但没有达成一致意见。Remix编辑器发出警告,该函数可能导致无限循环 函数KOTH.cleanTheKingsChest()的气体要求高:无限。如果某个功能的气体要求高于块气体限值,则无法执行该功能。请避免在函数或操作中出现修改大存储区域的循环(包括清除或复制存储中的阵列) 而且。。。 我应该为这个函数使用开放齐柏林飞艇的安全数学吗 function cleanTheKingsChest() public isOwner { uint bal =
我正在尝试使用web3监视第12次确认。我使用以下代码: let filter = web3.eth.filter('latest', filter.watch(function(error, result) { if (!error) { let confirmedBlock = web3.eth.getBlock(web3.eth.blockNumber - 11) if (confirmedBlock.transactions.length >
我有一个用例,我需要在我的合同中保存以下示例数据 { Linkage : {"4" : "1", "77" : "59", "5" : "64", "4" : "464", "455" : "364", "25" : "364", "25" : "164", "55" : "8684", "85" : "864"}, UserId : "Some Id", } 字典显然是可扩展的(根和链接)。 我想发送数据并将其作为对象(c#和Java风格)检索。因此,当我从WEB3进行通信时
用块菌我们可以得到一个很好的合同包装。但它有一个让我头疼的特点: 示例来自: MetaCoin.at(合同地址)。然后(函数(实例){ 硬币=实例; 返回硬币。sendCoin(帐户2,3,{来源:帐户1}); }).然后(函数(结果){ //在验证块菌合同之前,不会执行此代码块 //交易已被处理,并包含在开采区块中。 //如果事务在120秒内未被处理,则块菌合同将出错。 }) 这提出了四个问题: 如何防止用户获得120秒超时,因为他的交易可能在几分钟后被挖掘(取决于天然气价格和网络条件)?如
我有一个geth服务器,我需要将一些以太坊转移到其他钱包。我研究了geth的wiki页面,发现这个作业有一个名为sendTransaction的方法 首先:我使用以下命令转账,结果给了我一个交易哈希,但它没有将钱转账到所需的钱包 eth.sendTransaction({from:eth.coinbase, to:"WALLET-Address", value: web3.toWei(0.05, "ether")}); response: 0x.... Second:我使用了一些gas和gas
我必须在Solidity合同中存储JSON格式的数据。我不需要对数据进行任何操作。我只需要存储它,更新它,然后返回它 假设我有JSON格式的数据,例如: {'name': 'Nike', 'size':'12', 'color':'blue'} 我当前正在将数据作为字符串传递给构造函数: constructor(string _data) public { data = _data; } 并通过简单地替换整个字符串来更新数据: function updateData(string _da
我已经研究了许多类似的问题,但它们只涉及将智能合约的全部余额转移到个人帐户,操作如下: msg.sender.transfer(地址(this.balance)) 我试图(但未能)弄清楚的是如何转移部分余额。如果合同中有3个乙醚,我只想转让1个。我希望能够指定每次使用该函数时要传输的金额。我没有发布我的代码,因为我尝试过的任何东西都不起作用,这几乎是猜测 谢谢你的帮助 function withdraw(uint amount) public { msg.sender.transfer(
我正在以太坊geth环境中使用rinkiby进行测试(使用light节点)。通过牢固地构建契约,契约得到了正确的部署。如果我试图访问该实例中的函数,则会出现“匹配”错误。我没有在程序源代码的任何地方使用“匹配”,但我不知道问题出在哪一部分。我可以分析更可靠的代码吗 升级您的web3版本
假设我有这样的数据结构布局: struct ReviewStruct { string rating; ... } struct Restaurant { ... uint reviewCount; mapping(uint => ReviewStruct) reviews; } uint public restaurantCount = 0; mapping
我正在试图找到解决此问题的方法,处理事务确认顺序并将值设置为0 pragma solidity ^0.5.17; contract Test { uint256 amount; constructor() public {} function join() public { amount += 100; } function leave() public { amount -= 100; } } 鉴于这些交
我在这里使用etherscan api:()来获取用户的事务列表(给定公钥),并且我只获取已清除事务的列表,即使在etherscan.io上我也可以看到所有待处理的事务,因此信息“在那里”。深入到源代码中,我发现没有迹象表明我可以在何处查找未决事务。代码如下: const etherscan = require('etherscan-api').init(ETHERSCAN_TOKEN, 'ropsten', '3000'); etherscan.account .tx
还有我的密码 // SPDX-License-Identifier: MIT pragma solidity >=0.4.21 <0.7.0; contract SimpleStorage { uint storedData; uint[] public arr = [20,30,40]; function addvalue(uint x) public{ arr.push(x); } function getvalue() public view
我目前正在使用Node.js后端服务器中的智能合约和Web3.js库。当我尝试使用以下方法调用函数时: var myContract=new web3.eth.Contract(ERC721pResetMinterPauserautoIDBI,ERC721PresetMinterPauserAutoIdContractAddress{ from:from,, 加斯普里斯:加斯普里斯 }); 让结果; 试一试{ 结果=wait myContract.methods.mint(receipenadd
在过去的几个小时里,我一直在为一种加密货币编写一份智能合约,并准备编译它。但在编译时,Solidity出现了一个错误:“ParserError:应该是pragma、import指令或contract/interface/library定义。”它位于最后一行,我多次检查了整个代码,以确保没有错误。任何帮助都会很好。代码如下: pragma-solidity^0.4.21; //文件:zepplin solidity/contracts/owner/Ownable.sol 合同所有权{ 向公众所有人
在执行以下操作时,我遇到了一条错误消息。输入个人.解锁帐户(eth.帐户[0])后,我被要求输入密码。一旦进入Geth控制台,就会出现错误:无法使用给定的密码短语解密密钥。我知道密码是正确的,有些人认为错误消息文本可能是错误的。似乎我新创建的帐户还没有足够的ETH,但如果是这样,我们如何知道需要多少才能解锁帐户?只有当您输入的密码不正确时,才会传播此错误消息 正如@smarx所指定的,您所附加的谷歌链接似乎与您的问题无关 你链接到的“谷歌搜索”似乎完全无关。通常,此错误实际上意味着您输入的密码是
我试图创建一个稳定的智能合约,我从一个用户那里获取用户输入,基本上是一个散列,然后我希望这个散列存储在智能合约上,这样在最后我可以创建一个函数,另一个用户可以输入一个散列,程序将尝试将这个散列与以前存储的散列匹配。但是,我不确定如何将用户的给定输入存储在合同中 在以太坊智能合约中,您拥有存储在区块链上的状态变量。 因此,要存储散列,可以创建一个bytes32变量并将用户输入的散列存储到其中 示例-: contract testContract{ bytes32 public userHas
下面是一个关于以太坊节点和客户端的示例。有完整节点、灯光节点和归档节点。以下是灯光节点的定义: Light node Stores the header chain and requests everything else. Can verify the validity of the data against the state roots in the block headers. Useful for low capacity devices, such as embedded devic
我有一份这样的合同- contract Calculator { uint public result; constructor() public { result = 777; //note the initial value } function add(uint a, uint b) public returns (uint, address) { result = a + b; return (result
我们在几分钟前部署了ETH,人们抱怨如果您购买的ETH价值超过0.005,他们会收到错误“令牌无法传输。输出令牌可能有问题”。问题是什么?我如何解决
我目前正在以太坊平台(node.js和solidity)上工作。我的问题是如何使用node.js触发solidity(contract)中的事件?事件是从函数内部触发的。因此,您可以通过调用调用事件的函数来触发一个事件。以下是更多信息: 以下是智能合约的事件定义示例: contract Coin { //Your smart contract properties... // Sample event definition: use 'event' keyword and de
我安装Mix时遇到问题,我更新了所有内容,但仍然存在相同的问题: Process: Mix-ide [29364] Path: /usr/local/Cellar/cpp-ethereum/1.2.4/Mix-ide.app/Contents/MacOS/Mix-ide Identifier: . Version: ??? (mix ) Code Type: X86-64 (Native) Parent Process: ??? [1] Responsible: Mix-ide [29364]
我是刚接触Solidity的,这是我正在测试和混音的代码 browser/Untitled.sol:1:1::源文件未指定所需的编译器版本!考虑添加“语用稳固性”0.4.12 合同C{ ^ 跨越多条线 希望有人能给点指导 contract C { function bytes32ToString(bytes32 x) constant returns (string) { bytes memory bytesString = new bytes(32);
我用块菌测试合同有困难。我安装了最新版本的truffle以及TestRPC 据我所知,最新版本的truffle附带了一个用于测试SmartContracts的客户端,因此不再需要TestRPC 我有一个简单的合同,我的迁移是这样的: var Migrations = artifacts.require("./Migrations.sol"); var OrdersFacilitator = artifacts.require("./OrdersFacilitator.sol") module.
我正在用geth客户端运行以太坊节点。我希望能够通过rpc使用admin.peers命令,而不允许使用admin命名空间中的其他命令。有办法吗?如果没有,如何从我的节点远程获取此信息?不使用native geth。您必须像nginx反向代理服务器一样进行设置,以查看调用的函数,然后以这种方式进行过滤
我正在寻求帮助,因为我已经像我的事务一样陷入困境,这些事务显示在奇偶校验TxQueueViewer中的本地事务状态下: In queue: Future 如以下屏幕截图所示,为tx:0x0e97a4c 我正在设置tx:0x0e97a4c,并按如下方式发送: var Web3 = require('web3'); var Transaction = require('ethereumjs-tx'); var data = contract.method.getData(some, data);
我正在尝试向以太坊节点发送事务,但不断返回: {"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"unknown account"}} 这是我的要求: curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params": [{ "from": "0x73be29b5bbebfa0ba55644e0572999c61fe202b0", "to":
需要两个相关坚固性问题的帮助 问题1。比如说,我有一份合同叫另一份: contract B { function f1() { ... } } contract A { B b; function f() { b.f1(); } } f1的msg.sender是否与f()相同?当然,它是合同的地址吗 问题2。 喂,我有合同A和B。 我想要 contract A { B b; A(address addr) { b = B(addr
我面临的问题是使用以太坊区块链上给定smartcontract的事件日志中的数据回填专用数据库 然而,问题是:如何做到这一点而不达到eth_getLogs的限制(同样没有限制:如何有合理大小的RPC响应) 到目前为止我试过什么 我更喜欢使用Infura,但他们将此调用限制为每个响应100个条目。正确地说,查询应该分小块进行,以便进行负载平衡等。api分页+eth_getLogs是收集数据进行回填的正确方法吗 想法1:eth\u getLogs关于块的范围 除了查询块的范围之外,我不知道有什么方法
构建区块链应用程序时,为了在网站上显示状态(如支持postgres数据库),在非以太坊应用程序中保存数据的最佳做法是什么 一些具体问题: 为什么批量访问列表/数组/etc被描述为在稳定性方面令人痛苦 捕获区块链事件和更新链外数据库的最佳方式是什么 验证链外数据库完整性的最佳方法是什么(频率等) 您能否避免使用备份数据库并直接查询区块链 在“块菌宠物店”教程中,他们有一个返回整个链的视图 getAdapters()公共视图返回(地址[16]) 为什么批量访问列表/数组/etc被描述为在稳定性方面
是否可以从另一份solidity合同中获得给定ERC20代币的代币持有人名单 因为在大多数ERC20合同中,“余额”都存储在映射中,所以我认为这是不可能的,因为您无法获得实体映射的键列表 有什么我错过的吗?还是这根本不可能 谢谢 不可能直接从合同中获得ERC20代币持有人名单 你是正确的,因为你不能这样做,因为你不能得到一个坚实的映射键列表,因此没有外部干预是不可能的 尽管如此,仍有许多人需要此功能并执行任务来实现此功能。我能想到的最大的例子是根据他们持有的另一个代币向不同的账户空投代币。大多数
我正在尝试使用块菌宠物店编译我的智能合约。我在目录election/contracts/election.sol中有以下合同 pragma solidity >=0.4.0 <0.6.0; contract Election{ string public candidate; constructor() public{ candidate="Zeeshan"; } } 我正在使用以下命令迁移合同: 块菌迁移 我得到了以下结果: Compili
用高清钱包做一个项目。我们将为每次收到的付款生成一个新地址,然后将这些帐户扫描到我们的主钱包中。(我们需要这样做,因为我们必须将每个收到的付款与某些数据相关联。) 这是设置,工作正常。但是,在清理账目时,我们必须坐在那里,每次都按下trezor comfirm按钮。有了大量的交易,这可能会变得单调乏味。(注意:我们现在正在使用python和trezorctl工具) 有没有办法配置trezor或数据,这样我们就不需要每次按下确认按钮?除非您编译自定义固件 允许无需确认的签名显然会打开一个巨大的安全
我正在开发智能合约(SC)和前端Dapp,用于销售一些NFT ERC-721代币。当用户/地址购买其中一个NFT代币时,SC将为其铸造代币,而我的Dapp将在本地数据库中注册所述购买。考虑到用户可能在以后出售其代币,而无需通过我的前端Dapp,将SC中的特定用户的代币所有权与我的本地数据库同步的最佳做法是什么?我是否应该在用户每次访问站点并希望显示其在前端Dapp中拥有的令牌时查询SC?这不会花太长时间吗?只有当用户试图出售其代币之一以验证其是否为合法所有者时,我才应该查询SC吗?您需要扫描以太
我不熟悉solidity,我一直在尝试使用solidity中的函数打印简单的消息,但我未能成功部署,并且出现了一个错误,我无法找出问题所在 这就是我迄今为止所尝试的: pragma solidity ^0.6.0; contract test { string public _feedback; function reply(string memory feedback) public {
我在以太坊上部署了一个智能合约。当我触发它时,函数名和参数显示在etherscan上。如何隐藏这些信息? 以太扫描使用字典将函数签名转换为函数名(在您的示例中,0x38ed1739转换为swapExactTokensForTokens(uint256,uint256,地址[],地址,uint256)) 如果你不想让他们翻译函数名,你需要将你的合约函数(它的定义和所有调用它们的地方)重命名为一些乱七八糟的东西,比如kdjgklfdjiwefw(uint256,uint256,address[],a
我正在尝试使用web3获取智能合约上地址的余额,但余额始终为0。在Rinkeby上使用metamask,因为我的合同部署在Rinkeby上 您可以将钱包放入etherScan的balanceOf功能中,以验证钱包是否有余额。使用地址0x8b54A82a12bD5A7bA33B4842cA677E55f78a8612 let provider = web3.currentProvider; web3 = new Web3(provider); let abi = 'too long of a st
有人能帮我克服这个错误吗?为什么合同没有编译?我可以在我的机器上部署源代码,只需重新启动浏览器并清理缓存,一切正常。你好,朋友,谢谢你的留言。现在我得到“这个合同没有实现所有功能,因此无法创建”。我已经添加了ERC721合同的所有函数、事件和变量,但仍然没有任何用处。你能帮我克服错误吗?你好,Paradox。我正在使用以下作为示例项目并构建合同。这是我的代码,现在我没有得到上面的内部编译器错误。我认为问题在于进口。我删除了导入,将所有合同粘贴到一个文件中,错误就消失了。
源文件需要不同的编译器版本(当前编译器为0.5.0+commit.1d4f565a.Emscripten.clang)-请注意,夜间构建被认为严格低于发布版本 pragma-solidity^0.4.23; ^----------------------^ SyntaxError:源文件需要不同的编译器版本(当前编译器为0.5.0+commit.1d4f565a.Emscripten.clang)-请注意,夜间构建被认为严格低于发布版本 pragma坚实度^0.5.4; ^-----------
我开始进入以太坊区块链的第一步,在私有网络上实现对等。我能够配置奇偶校验,并通过奇偶校验UI在我的专用网络上的开发模式链上执行智能合约的部署,奇偶校验UI还能够调用合约的方法 我面临的问题与使用Web3.js在智能合约中调用函数有关。我能够使用Web.js库连接到链 Web3 = require('web3') web3 = new Web3('ws://localhost:8546') mycontract = web3.eth.Contract([{"constant":false,"i
我正试图在林克比部署一份合同。我正在使用以下命令: $ truffle migrate --networks rinkeby Compiling your contracts... =========================== > Compiling ./contracts/Migrations.sol > Compiling ./contracts/Voting.sol > Artifacts written to ./public/contracts/build
我对迁移有这个问题,它表明:工件来自不同的编译器运行 我认为问题在于编制,我看到合同编制不止一次: Compiling @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol Compiling @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol Compiling @openzeppelin/contracts-ethereum-p
我正在学习OpenZeppelin的ERC20合同,并对批准功能感到好奇: function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[send