首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建智能合同以及时发送ETH tx?

如何创建智能合同以及时发送ETH tx?
EN

Ethereum用户
提问于 2017-09-25 08:25:05
回答 3查看 4.7K关注 0票数 6

为了特定的目的,我想在ETH区块链中创建一个智能契约,它的工作是在时间到来时将特定数量的ETH发送到一个定义的地址(unix时间或特定的块号)。

我刚开始讲Ethereum和区块链,所以如果这个问题是菜鸟,请原谅我。但有人有一个代码示例,我可以跟随和修改以满足我的目的?

我所需要的就是:

  • 时间的到来(unix时间/块号) ->发送定义的ETH数量到定义的ETH地址/另一个智能契约地址
  • 有定制的气体和气体
EN

回答 3

Ethereum用户

回答已采纳

发布于 2017-09-25 08:50:24

事实上,这是相当复杂的。Ethereum合同本身不能在特定的时间点启动或启动事务。您有两个解决此问题的选项:外部调用或退出模式,请参见下面。

外部调用

在每项交易或交易链(即呼叫其他合同或向其他合同发送以太合同的合同)开始时,需要有一个经常账户的初始外部调用。

因此,如果您希望您的合同在特定的时间窗口内将以太发送到预定义的地址,则您或其他人需要启动此事务。如果您不想自己做,或者您正在寻找一些自动化的方法,您可能想要签出服务,如以太闹钟。目前,它正在开发主板网。如果您不想使用EAC,也可以在您自己的服务器上设置一个cron作业来启动事务。

不过,底线是:您将始终需要一个可信任的第三方或服务,该第三方或服务位于Ethereum块链的外部,用于计划的函数执行。

撤回模式替代

作为另一种选择,如果达到某一特定时间点,您可以向您的合同受益人提供允许她或他从合同中提取资金的权利:

代码语言:javascript
复制
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可以在几秒钟内被操作,所以只有在时间表(如小时或天)上操作时,它的使用才是安全的。

票数 9
EN

Ethereum用户

发布于 2017-09-25 08:56:22

契约本身不能唤醒自己去执行某件事情,这不是在Ethereum中实现的东西。

有一种服务允许这样做,以太闹钟。这是一个智能契约,可以注册操作和日期,人们可以调用调用预定操作的契约。

它依赖于有兴趣(以太奖励)的用户这样做。

目前,该服务正在主网网上运行。

或者,您可以安排调用,如果有人在您的合同中调用特殊函数,则在限制日期之后执行调用。你可以自己打电话,也可以用电脑上的脚本来调用它。

票数 1
EN

Ethereum用户

发布于 2018-11-08 20:20:13

最简单和最可靠的方法是使用以太闹钟

您可以使用MyCrypto钱包,切换“稍后发送”开关,设置执行时间,并通过调用智能契约设置数据字段。

这是一个全面的教程和视频如何做:https://medium.com/@MyCrypto/schedule-your-ethereum-transactions-now-on-mycrypto-92a6305f7dcc

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/27052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档