getData
This commit is contained in:
parent
c56642198a
commit
bb43d04068
@ -507,4 +507,54 @@ class Contract
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getData
|
||||
* Get the function method call data.
|
||||
* With this function, you can send signed contract function transaction.
|
||||
* 1. Get the funtion data with params.
|
||||
* 2. Sign the data with user private key.
|
||||
* 3. Call sendRawTransaction.
|
||||
*
|
||||
* @param mixed
|
||||
* @return void
|
||||
*/
|
||||
public function getData()
|
||||
{
|
||||
if (isset($this->functions) || isset($this->constructor)) {
|
||||
$arguments = func_get_args();
|
||||
$functionData = '';
|
||||
|
||||
if (empty($this->toAddress) && !empty($this->bytecode)) {
|
||||
$constructor = $this->constructor;
|
||||
|
||||
if (count($arguments) < count($constructor['inputs'])) {
|
||||
throw new InvalidArgumentException('Please make sure you have put all constructor params and callback.');
|
||||
}
|
||||
if (!isset($this->bytecode)) {
|
||||
throw new \InvalidArgumentException('Please call bytecode($bytecode) before getData().');
|
||||
}
|
||||
$params = array_splice($arguments, 0, count($constructor['inputs']));
|
||||
$data = $this->ethabi->encodeParameters($constructor, $params);
|
||||
$functionData = $this->bytecode . Utils::stripZero($data);
|
||||
} else {
|
||||
$method = array_splice($arguments, 0, 1)[0];
|
||||
|
||||
if (!is_string($method) && !isset($this->functions[$method])) {
|
||||
throw new InvalidArgumentException('Please make sure the method is existed.');
|
||||
}
|
||||
$function = $this->functions[$method];
|
||||
|
||||
if (count($arguments) < count($function['inputs'])) {
|
||||
throw new InvalidArgumentException('Please make sure you have put all function params and callback.');
|
||||
}
|
||||
$params = array_splice($arguments, 0, count($function['inputs']));
|
||||
$data = $this->ethabi->encodeParameters($function, $params);
|
||||
$functionName = Utils::jsonMethodToString($function);
|
||||
$functionSignature = $this->ethabi->encodeFunctionSignature($functionName);
|
||||
$functionData = Utils::stripZero($functionSignature) . Utils::stripZero($data);
|
||||
}
|
||||
return $functionData;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user