问题标签 [smartcontracts]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
solidity - 如何使用松露测试跨合约调用的智能合约?
我有两份合同,我写在一个名为 Sum.sol 的文件中。sum 合约调用 Add 合约。我只想测试跨合约调用。如果我没有将两个合约放在一个文件中,使用 truffle 编译 Sum 会失败。但是当我做测试时,结果太奇怪了。我不知道这是怎么发生的。
然后我在松露中为它写一个测试
并使用 truffle 进行测试,结果是:
haskell - 如何准确测量减少 λ 项所需的努力?
以太坊等区块链在其智能合约处理虚拟机上使用基于堆栈寄存器的语言。该模型非常方便,因为它提供了一种简单的机制来衡量运行程序所需的工作量:只需为每个原始操作固定一个成本并求和。
假设以智能合约为特色的区块链没有使用虚拟机,而是使用了函数式编程语言,例如 Haskell 的核心。是否有任何简单、准确的方法来测量执行功能程序所需的工作量 - 请记住节点能够使用任何评估策略,因此这种测量必须是通用的。
haskell - 什么是智能合约的合适类型?
我想知道用 Haskell 或 Idris 等类型语言表达智能合约的最佳方式是什么(例如,你可以编译它以在以太坊网络上运行)。我主要关心的是:捕获合约可以做的所有事情的类型是什么?
天真的解决方案:EthIO
一个天真的解决方案是将合同定义为EthIO
类型的成员。这种类型类似于 Haskell 的IO
,但不是启用系统调用,而是包括区块链调用,即,它可以读取和写入区块链的状态,调用其他合约,获取块数据等。
这显然足以执行任何合同,但是:
会太强大。
特别是与以太坊区块链非常耦合。
保守的解决方案:事件溯源模式
在这个想法下,合约将被定义为折叠一系列动作:
所以,一个程序看起来像:
也就是说,您定义初始状态、操作类型以及当用户提交操作时该状态如何更改。这将允许人们定义任何不涉及发送/接收资金的任意合同。大多数区块链都有某种货币,最有用的合约以某种方式涉及货币,所以这种类型的限制太强了。
不太保守的解决方案:事件+货币
我们可以通过将货币逻辑硬编码到上面的类型中来使上面的类型知道货币。因此,我们会得到类似的东西:
即,合约开发者需要明确定义如何处理货币存款和取款。这种类型足以定义任何可以与主机区块链货币交互的自包含合约。遗憾的是,这样的合约无法与其他合约交互。在实践中,合同经常相互影响。例如,交易所需要与其交换的 Token 合约进行通信以查询余额等。
概括:全局状态?
因此,让我们退后一步,将保守的解决方案重写为:
根据这个定义,该act
函数不仅可以访问合约自身的状态,还可以访问同一区块链上所有其他合约的状态。由于每个合约都可以读取彼此的状态,因此可以轻松地在此之上实现通信协议,因此,这种类型足以实现任意交互的合约。此外,如果区块链的货币本身是作为合同实现的(可能使用包装器),那么该类型也足以处理货币,尽管它没有在类型上进行硬编码。但该解决方案有两个问题:
查看另一个合约的状态看起来像是一种非常“hacky”的通信方式;
以这种方式定义的合约将无法与不了解该解决方案的现有合约进行交互。
现在怎么办?
现在我在黑暗中。我知道我对这个问题没有正确的抽象,但我不确定它会是什么。看起来问题的根源在于我无法正确捕捉跨合约通信的现象。哪种具体类型更适合定义任意智能合约?
solidity - 在 Solidity 智能合约中发送以太币
我正在编写一个可靠的智能合约,我需要将以太币从我的 coinbase(eth.coinbase)发送到我的朋友 coinbase(地址 = 0x0123)。
如果我尝试使用 address.send(value) 该函数不会减少我的帐户,也不会增加我的朋友币基数。
我只能使用“eth.sendTransaction(VALUE, {from:eth.coinbase, to:address})”在 geth 中发送以太币,所以我想知道是否可以在合约中调用 eth 方法或以其他方式发送以太币在智能合约中
platform - 区块链智能合约平台的区别?!!
对区块链技术有点陌生,将致力于基于区块链的智能合约项目。
我想知道有哪些可用的平台?他们有什么区别?(比较点)
帮助请:) !!
go - 如何从 Go 调用以太坊合约?
我已经尝试遵循go-ethereum 指南,但它似乎已经过时了。我尝试在 Go 中寻找 web3 库,但一切都试图指向“使用 geth”。
从 Go 中,我如何调用以太坊区块链中的合约?如果我的目标是 testnet 或 testrpc,会有什么不同?
go - 如何在 Hyperledger 编程中使用 stub.CreateTable
基于 Hyperledger 的链码使用 stub.PutState 和 stub.GetState 与数据库进行交互。但是,如果我有一个具有多个属性的结构,例如:
person {
"ID": "123",
"firstname":"joe",
"lastname":"doe",
"age":"34",
}
那么如果我想更新年龄,我应该向方法发送什么参数?
我注意到有 stub.CreateTable 方法似乎对我的情况更方便,但是,我找不到任何有关如何使用此方法的文档或说明。请给我一个文件链接或一些简短的解释好吗?
谢谢。
json - 以太坊。有没有办法通知合同创建?
当我向以太坊区块链发布新的智能合约时,我想通知另一个合约。有什么选择吗?例如,当合约到达区块链时自动发送交易。
version-control - Solidity 合约:源代码控制
假设,我在 Solidity 中编写了一份合约,目前正在由多个节点运行。出于某种原因,我进行了更改 - 代码或配置或两者兼而有之。我怎么知道,所有运行这个合约的节点都在运行最新版本的代码?
相反,如果合约被放置在一个开放的存储库(例如 GitHub)中,我怎么知道代码没有被篡改?
如果大多数节点确实决定篡改代码并运行该版本怎么办?
currency - 销毁智能合约中的代币/硬币
我目前正在做一个项目,试图为 P2P 能源交易开发一种货币和模型,其中每千瓦时的可再生能源产生一个硬币给那个生产者。我的问题是关于销毁智能合约中的硬币。
与我的项目类似的所有当前实现都没有适当的协议来销毁旨在防止其价值过度通缩的硬币。一些项目通过交易成本和丢失钱包破坏了他们提议的能源货币,但我认为这还不够。这是因为如果越来越多的人开始采用该项目并使用他们的太阳能电池板和风电场来铸造大量硬币,能源硬币可以以指数速度铸造。代币将继续流通,代表过去几天/几周/几个月前产生(和使用)的能量。
我想建议你可以使用这些硬币来支付公用事业的能源消耗,这最终将销毁那些确切的硬币,这些硬币写在消费者和能源公司将同意的不可变智能合约中。
我是计算机编码的新手,我不想假设人们可以轻松地在智能合约中写出销毁()指定数量的硬币。是否有可能做到这一点并使其发挥作用?我想我只需要第二个意见!
谢谢,
约翰