Tron System Contract . Trigger Smart Contract


A system contract used to interact with smart contract.


Generate Contract Serialized Hex:

<?php 

define("TRX_TO_SUN",'1000000');
define("SUN_TO_TRX", '0.000001');

include_once "../libraries/vendor/autoload.php";
include_once("html_iframe_header.php");
include_once("tron_utils.php");

//include all php files that generated by protoc
$dir   = new RecursiveDirectoryIterator('protobuf/core/');
$iter  = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($iter, '/^.+\.php$/', RecursiveRegexIterator::GET_MATCH); // an Iterator, not an array

foreach ( $files as $file ) {
	
	if (is_array($file)) {
		foreach($file as $filename) {
			include $filename;
		}
	} else {
		include $file;
	}
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    try {
		
		$data = ltrim($_POST['data'], '0x');
		$ownerAddressHex = base58check2HexString($_POST['from']);
		$contractAddressHex = base58check2HexString($_POST['caddress']);
		
		$ownerAddressBin = hex2str($ownerAddressHex);
		$contractAddressBin = hex2str($contractAddressHex);
		
		$callValueInSun = bcmul($_POST['callvalue'], TRX_TO_SUN);

		$contract = new \Protocol\Transaction\Contract();
		$triggerSmartContract = new \Protocol\TriggerSmartContract();
		
		$triggerSmartContract->setData(hex2str($data));
		$triggerSmartContract->setOwnerAddress($ownerAddressBin);
		$triggerSmartContract->setContractAddress($contractAddressBin);
		$triggerSmartContract->setCallValue($callValueInSun);
		
		$any = new \Google\Protobuf\Any();
		$any->pack($triggerSmartContract);
		
		$contract->setParameter( $any );
		$contract->setType( \Protocol\Transaction\Contract\ContractType::TriggerSmartContract );
		
    ?>
	<div class="alert alert-success">
		<h6 class="mt-3">Contract Serialized Hex</h6>
		<textarea class="form-control" rows="5" id="comment" readonly><?php echo str2hex($contract->serializeToString());?></textarea>
		
		<h6 class="mt-3">Contract Serialized Json</h6>
		<textarea class="form-control" rows="5" id="comment" readonly><?php echo $contract->serializeToJsonString()?></textarea>
	</div>
<?php 
    } catch (Exception $e) {
        $errmsg .= "Problem found. " . $e->getMessage();

    }
} 

if ($errmsg) {
?>
    <div class="alert alert-danger">
        <strong>Error!</strong> <?php echo $errmsg?>
    </div>
<?php
}
?>
<form action='' method='post'>
    <div class="form-group">
        <label for="from">Owner Address:</label>
        <input class="form-control" type='text' name='from' id='from' value='<?php echo $_POST['from']?>'>
    </div>
	
	<div class="form-group">
        <label for="caddress">Contract Address:</label>
        <input class="form-control" type='text' name='caddress' id='caddress' value='<?php echo $_POST['caddress']?>'>
    </div>
	
	<div class="form-group">
		<label for="callvalue">Call Value:</label>
		
		<div class="input-group mb-3">
			<input class="form-control" type='text' name='callvalue' id='callvalue' value='<?php echo $_POST['callvalue']?>'>
			<div class="input-group-append">
			  <span class="input-group-text">TRX</span>
			</div>
		</div>
		
		<small>* Put 0 if you do not want to send any TRX to contract address.</small>
	</div>
	
	<div class="form-group">
        <label for="data">Encoded Data (Hex):</label>
        <input class="form-control" type='text' name='data' id='data' value='<?php echo $_POST['data']?>'>
		
		<small>* You can use <a href="https://www.btcschools.net/ethereum/eth_abi_data_encoding.php" target="_blank">ethereum abi encoding tool</a> to generate this data.</small>
    </div>
   
    <input type='submit' class="btn btn-success btn-block"/>
</form>
<?php
include_once("html_iframe_footer.php");
message TriggerSmartContract {
	
  #The owner of the current account
  bytes owner_address = 1;
  
  #A contract address to interact
  bytes contract_address = 2;
  
  #TRX value
  int64 call_value = 3;
  
  #Encoded data includes contract function and its params
  bytes data = 4;
}
<?php
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: core/contract/smart_contract.proto

namespace Protocol;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

/**
 * Generated from protobuf message <code>protocol.TriggerSmartContract</code>
 */
class TriggerSmartContract extends \Google\Protobuf\Internal\Message
{
    /**
     * Generated from protobuf field <code>bytes owner_address = 1;</code>
     */
    protected $owner_address = '';
    /**
     * Generated from protobuf field <code>bytes contract_address = 2;</code>
     */
    protected $contract_address = '';
    /**
     * Generated from protobuf field <code>int64 call_value = 3;</code>
     */
    protected $call_value = 0;
    /**
     * Generated from protobuf field <code>bytes data = 4;</code>
     */
    protected $data = '';
    /**
     * Generated from protobuf field <code>int64 call_token_value = 5;</code>
     */
    protected $call_token_value = 0;
    /**
     * Generated from protobuf field <code>int64 token_id = 6;</code>
     */
    protected $token_id = 0;

    /**
     * Constructor.
     *
     * @param array $data {
     *     Optional. Data for populating the Message object.
     *
     *     @type string $owner_address
     *     @type string $contract_address
     *     @type int|string $call_value
     *     @type string $data
     *     @type int|string $call_token_value
     *     @type int|string $token_id
     * }
     */
    public function __construct($data = NULL) {
        \GPBMetadata\Core\Contract\SmartContract::initOnce();
        parent::__construct($data);
    }

    /**
     * Generated from protobuf field <code>bytes owner_address = 1;</code>
     * @return string
     */
    public function getOwnerAddress()
    {
        return $this->owner_address;
    }

    /**
     * Generated from protobuf field <code>bytes owner_address = 1;</code>
     * @param string $var
     * @return $this
     */
    public function setOwnerAddress($var)
    {
        GPBUtil::checkString($var, False);
        $this->owner_address = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>bytes contract_address = 2;</code>
     * @return string
     */
    public function getContractAddress()
    {
        return $this->contract_address;
    }

    /**
     * Generated from protobuf field <code>bytes contract_address = 2;</code>
     * @param string $var
     * @return $this
     */
    public function setContractAddress($var)
    {
        GPBUtil::checkString($var, False);
        $this->contract_address = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>int64 call_value = 3;</code>
     * @return int|string
     */
    public function getCallValue()
    {
        return $this->call_value;
    }

    /**
     * Generated from protobuf field <code>int64 call_value = 3;</code>
     * @param int|string $var
     * @return $this
     */
    public function setCallValue($var)
    {
        GPBUtil::checkInt64($var);
        $this->call_value = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>bytes data = 4;</code>
     * @return string
     */
    public function getData()
    {
        return $this->data;
    }

    /**
     * Generated from protobuf field <code>bytes data = 4;</code>
     * @param string $var
     * @return $this
     */
    public function setData($var)
    {
        GPBUtil::checkString($var, False);
        $this->data = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>int64 call_token_value = 5;</code>
     * @return int|string
     */
    public function getCallTokenValue()
    {
        return $this->call_token_value;
    }

    /**
     * Generated from protobuf field <code>int64 call_token_value = 5;</code>
     * @param int|string $var
     * @return $this
     */
    public function setCallTokenValue($var)
    {
        GPBUtil::checkInt64($var);
        $this->call_token_value = $var;

        return $this;
    }

    /**
     * Generated from protobuf field <code>int64 token_id = 6;</code>
     * @return int|string
     */
    public function getTokenId()
    {
        return $this->token_id;
    }

    /**
     * Generated from protobuf field <code>int64 token_id = 6;</code>
     * @param int|string $var
     * @return $this
     */
    public function setTokenId($var)
    {
        GPBUtil::checkInt64($var);
        $this->token_id = $var;

        return $this;
    }

}









Tutorials
About Us
Contents have been open source in GITHUB. Please give me a ⭐ if you found this helpful :)
Community
Problem? Raise me a new issue.
Support Us
Buy me a coffee. so i can spend more nights for this :)

BTCSCHOOLS would like to present you with more pratical but little theory throughout our tutorials. Pages' content are constantly keep reviewed to avoid mistakes, but we cannot warrant correctness of all contents. While using this site, you agree to accept our terms of use, cookie & privacy policy. Copyright 2019 by BTCSCHOOLS. All Rights Reserved.