tip: 44
title: TRC-44 Address.isContract instructions
author: llwslc<llwslc@gmail.com>
discussions to: https://github.com/tronprotocol/TIPs/issues/43
category: TRC
status: accept
created: 2019-07-10
Simple Summary
To provide a new opcode, which returns the type of the address.
Abstract
This TIP specifies a new opcode, which determines whether the address type is a contract address.
Motivation
Some contracts need to limit its callers, such as some functions can only be called by the user, not by the contract.
Specification
A new opcode, ISCONTRACT, is introduced, with number 0xD4. The ISCONTRACT takes one argument from the stack, pushes to the stack the boolean value whether the address type is a contract address.
In case the address does not exist false is pushed to the stack.
example:
contract Test {
function checkAddr(address addr) view public returns (bool) {
return addr.isContract;
}
}
The energy cost of the ISCONTRACT is 400.
Backwards Compatibility
There are no backwards compatibility concerns.
Test Cases
- The
ISCONTRACT of a contract address is true.
- The
ISCONTRACT of an account address is false.
- The
ISCONTRACT of a non-existent address is false.
- The
ISCONTRACT of a precompiled contract is false.
- The
ISCONTRACT of self address in constructor function is true.
- The
ISCONTRACT of a selfdestructed contract address is false.
Simple Summary
To provide a new opcode, which returns the type of the address.
Abstract
This TIP specifies a new opcode, which determines whether the address type is a contract address.
Motivation
Some contracts need to limit its callers, such as some functions can only be called by the user, not by the contract.
Specification
A new opcode,
ISCONTRACT, is introduced, with number 0xD4. TheISCONTRACTtakes one argument from the stack, pushes to the stack the boolean value whether the address type is a contract address.In case the address does not exist
falseis pushed to the stack.example:
The energy cost of the
ISCONTRACTis 400.Backwards Compatibility
There are no backwards compatibility concerns.
Test Cases
ISCONTRACTof a contract address istrue.ISCONTRACTof an account address isfalse.ISCONTRACTof a non-existent address isfalse.ISCONTRACTof a precompiled contract isfalse.ISCONTRACTof self address in constructor function istrue.ISCONTRACTof a selfdestructed contract address isfalse.