首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您能通过cron作业调用合同函数吗?

您能通过cron作业调用合同函数吗?
EN

Ethereum用户
提问于 2017-07-29 19:35:39
回答 3查看 4.1K关注 0票数 5

我正在尝试自动调用合同函数。每天,我都想在我的合同中调用一个函数,使我的DApp用户可以使用数据。我想自动化这一点,这样我就不需要手动将函数称为我自己了。是否可以在带有cron作业的job服务器上自动化此过程?如果没有,是否有更好的方法(最好不用运行vps)

EN

回答 3

Ethereum用户

发布于 2017-07-30 16:47:27

是的你可以自动完成这个任务。有许多不同的方法。为了本例的目的,我将假设您需要发布与您的合同交互的事务。

您要构建的系统有几个关键部分。每个部分都有大量的选择,这意味着构建选项的组合爆炸。如果您指定了更多关于以下内容的内容,将会有所帮助:

  • 节点:您是否已经运行了Ethereum节点,如geth或奇偶校验?
  • Web3 3连接器:从javascript,java,C#,ruby,python等中选择。
  • 核心逻辑:你更喜欢哪种连接器语言?
  • 调度程序:您已经选择了cron,太好了。

在我们得到这些答案之前,我将给出一个我喜欢的选项:

  • 节点:geth,有一个有资金的,未锁定的帐户。*
  • Web3连接器:web3.py,通过IPC连接(默认)。
  • 核心逻辑:加载数据并发出事务的python脚本
  • 调度程序: cron

*资金充足、未锁定的帐户意味着计算机上运行的任何进程都有能力耗尽您的帐户。你可以尽量减少风险,保持足够低的余额,如果它被偷,你就不会错过它。你只要付够油钱就行了。

票数 3
EN

Ethereum用户

发布于 2017-08-29 18:00:14

您可以自动化此任务,正如carver所说,堆栈将非常重要,因为它将定义您使用的调度程序/cron作业包。

我做了类似的事情,将共享我的堆栈和方法:我使用了geth客户机、Nodejs、Web3js、永远cron

  • 永远:一个简单的CLI工具,用于确保给定的脚本连续运行(即永远)。
  • NPM包(上面提到)真的很好,我非常喜欢它,因为它提供了很多定制选项。

下面的方法可以帮助您获取函数十六进制并传递参数来调用该函数:

使用web3.js库,它可以帮助完成同样的工作。只需使用NPM (或其他任何地方)下载web3.js,并通过以下方式获取任务所需的模块:

代码语言:javascript
复制
const_ = require('lodash');
const SolidityFunction = require('web3/lib/web3/function');

您可以使用web3.js库和ABI找到函数定义,使用以下代码:

代码语言:javascript
复制
var ABI = JSON.parse(<your_ABI>);
var functionDef = new SolidityFunction('', _.find(ABI, { name: '<your_function_name>' }), '');

之后,您可以调用方法toPayload,它将帮助您将要传递给函数的值转换为HEX数据。

代码语言:javascript
复制
var payloadData = functionDef.toPayload([<value_for_var_1>, <value_for_var_2>, <value_for_var_3>, <value_for_var_4>]).data;

payloadData可用作数据属性的值。

示例:

代码语言:javascript
复制
var rawTx = {
 to: <to_address>,
 data: payloadData,
 value: '0x0',
 from: <from_address>,
 nonce: nonce,
 gasLimit: gasLimit,
 gasPrice: gasPrice
}

您有一个原始事务对象,您可以使用ethereumjs-tx对事务进行签名,并使用web3.sendRawTransaction调用您的契约函数。

希望这能有所帮助。

票数 2
EN

Ethereum用户

发布于 2017-07-30 04:23:02

如果您的调用没有修改契约状态,那么它应该非常简单,您只需要访问同步并运行的geth。如果不想部署geth,可以使用第三方服务,如以太扫描或呋喃。

如果您的调用确实修改了合同,它仍然可以完成,但是您必须找到一种方法来管理您自己帐户的私钥,而且还要管理余额,因为每次操作都有成本。您可以使用以太-tx创建事务标记,并使用sendRawTransacrion向网络广播。

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

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

复制
相关文章

相似问题

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