I am attempting to use 2 contracts together, and I need my 2nd contract to pass his own address to the first contract.
Is there an easy way to do this? Like this.address
?
Or should I update my contract own address into a variable?
Ethereum Stack Exchange is a question and answer site for users of Ethereum, the decentralized application platform and smart contract enabled blockchain. It only takes a minute to sign up.
Sign up to join this communityAs of Solidity v5, this
become deprecated. You now have to use address(this)
.
Get contract address in Solidity
Short answer: The global variable
this
is the contract address.
Long answer: this
is a variable representing the current contract. Its type is the type of the contract. Since any contract type basically inherits from the address type, this is always convertible to address and in this case contains its own address.
I tried this
and this.address
but found the following works:
function transferTo(address receiver, uint amount) {
if ( amount == 0
|| receiver == address(this) )
return;
this
is a deprecated way to get the address of the contract. As of Solidity 0.4.24 at least, address(this)
is the only way that works.
Oct 25, 2018 at 18:25
If you're looking for an assembly (yul) answer:
contract ContractAddress {
address public disAddress;
constructor() public {
assembly {
sstore(disAddress_slot, address)
}
}
}
Notice the address
on the 7th line? That refers to the contract's own address. Test it yourself in Remix.