我正在尝试自动调用合同函数。每天,我都想在我的合同中调用一个函数,使我的DApp用户可以使用数据。我想自动化这一点,这样我就不需要手动将函数称为我自己了。是否可以在带有cron作业的job服务器上自动化此过程?如果没有,是否有更好的方法(最好不用运行vps)
发布于 2017-07-30 16:47:27
是的你可以自动完成这个任务。有许多不同的方法。为了本例的目的,我将假设您需要发布与您的合同交互的事务。
您要构建的系统有几个关键部分。每个部分都有大量的选择,这意味着构建选项的组合爆炸。如果您指定了更多关于以下内容的内容,将会有所帮助:
在我们得到这些答案之前,我将给出一个我喜欢的选项:
geth,有一个有资金的,未锁定的帐户。**资金充足、未锁定的帐户意味着计算机上运行的任何进程都有能力耗尽您的帐户。你可以尽量减少风险,保持足够低的余额,如果它被偷,你就不会错过它。你只要付够油钱就行了。
发布于 2017-08-29 18:00:14
您可以自动化此任务,正如carver所说,堆栈将非常重要,因为它将定义您使用的调度程序/cron作业包。
我做了类似的事情,将共享我的堆栈和方法:我使用了geth客户机、Nodejs、Web3js、永远和cron。
下面的方法可以帮助您获取函数十六进制并传递参数来调用该函数:
使用web3.js库,它可以帮助完成同样的工作。只需使用NPM (或其他任何地方)下载web3.js,并通过以下方式获取任务所需的模块:
const_ = require('lodash');
const SolidityFunction = require('web3/lib/web3/function');您可以使用web3.js库和ABI找到函数定义,使用以下代码:
var ABI = JSON.parse(<your_ABI>);
var functionDef = new SolidityFunction('', _.find(ABI, { name: '<your_function_name>' }), '');之后,您可以调用方法toPayload,它将帮助您将要传递给函数的值转换为HEX数据。
var payloadData = functionDef.toPayload([<value_for_var_1>, <value_for_var_2>, <value_for_var_3>, <value_for_var_4>]).data;payloadData可用作数据属性的值。
示例:
var rawTx = {
to: <to_address>,
data: payloadData,
value: '0x0',
from: <from_address>,
nonce: nonce,
gasLimit: gasLimit,
gasPrice: gasPrice
}您有一个原始事务对象,您可以使用ethereumjs-tx对事务进行签名,并使用web3.sendRawTransaction调用您的契约函数。
希望这能有所帮助。
发布于 2017-07-30 04:23:02
如果您的调用没有修改契约状态,那么它应该非常简单,您只需要访问同步并运行的geth。如果不想部署geth,可以使用第三方服务,如以太扫描或呋喃。
如果您的调用确实修改了合同,它仍然可以完成,但是您必须找到一种方法来管理您自己帐户的私钥,而且还要管理余额,因为每次操作都有成本。您可以使用以太-tx创建事务标记,并使用sendRawTransacrion向网络广播。
https://ethereum.stackexchange.com/questions/23289
复制相似问题