为了特定的目的,我想在ETH区块链中创建一个智能契约,它的工作是在时间到来时将特定数量的ETH发送到一个定义的地址(unix时间或特定的块号)。
我刚开始讲Ethereum和区块链,所以如果这个问题是菜鸟,请原谅我。但有人有一个代码示例,我可以跟随和修改以满足我的目的?
我所需要的就是:
发布于 2017-09-25 08:50:24
事实上,这是相当复杂的。Ethereum合同本身不能在特定的时间点启动或启动事务。您有两个解决此问题的选项:外部调用或退出模式,请参见下面。
在每项交易或交易链(即呼叫其他合同或向其他合同发送以太合同的合同)开始时,需要有一个经常账户的初始外部调用。
因此,如果您希望您的合同在特定的时间窗口内将以太发送到预定义的地址,则您或其他人需要启动此事务。如果您不想自己做,或者您正在寻找一些自动化的方法,您可能想要签出服务,如以太闹钟。目前,它正在开发主板网。如果您不想使用EAC,也可以在您自己的服务器上设置一个cron作业来启动事务。
不过,底线是:您将始终需要一个可信任的第三方或服务,该第三方或服务位于Ethereum块链的外部,用于计划的函数执行。
作为另一种选择,如果达到某一特定时间点,您可以向您的合同受益人提供允许她或他从合同中提取资金的权利:
pragma solidity ^0.6.0;
function withdraw(){
// money can only be withdrawn if time has come
require(block.timestamp > timeHasCome);
// money can only be withdrawn by beneficiary
require(msg.sender == beneficiary);
// make sure beneficiary can only withdraw once
// by deleting his address from the contract's memory
beneficiary = address(0);
// finally send the funds
(bool success, ) = msg.sender.call.value(predefinedAmount)(""); // This forwards all available gas
require(success, "Transfer failed."); // Return value is checked
}因此,如果是timeHasCome,则允许beneficiary通过调用契约的withdraw函数来提取predefinedAmount一次。
注意,block.timestamp是块创建的时间,由矿工设置。请注意,block.timestamp可以在几秒钟内被操作,所以只有在时间表(如小时或天)上操作时,它的使用才是安全的。
发布于 2017-09-25 08:56:22
契约本身不能唤醒自己去执行某件事情,这不是在Ethereum中实现的东西。
有一种服务允许这样做,以太闹钟。这是一个智能契约,可以注册操作和日期,人们可以调用调用预定操作的契约。
它依赖于有兴趣(以太奖励)的用户这样做。
目前,该服务正在主网网上运行。
或者,您可以安排调用,如果有人在您的合同中调用特殊函数,则在限制日期之后执行调用。你可以自己打电话,也可以用电脑上的脚本来调用它。
发布于 2018-11-08 20:20:13
最简单和最可靠的方法是使用以太闹钟。
您可以使用MyCrypto钱包,切换“稍后发送”开关,设置执行时间,并通过调用智能契约设置数据字段。
这是一个全面的教程和视频如何做:https://medium.com/@MyCrypto/schedule-your-ethereum-transactions-now-on-mycrypto-92a6305f7dcc。
https://ethereum.stackexchange.com/questions/27052
复制相似问题