Creating a Dynamic Contract (Advanced)
A walkthrough on a more advanced Dynamic Contract usage.
Solidity Example
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract ERC20Wrapper {
mapping (address => mapping (address => uint256)) private _tokensAndBalances;
function getContractBalance(address token) public view returns(uint256) {
IERC20 erc20 = IERC20(token);
return erc20.balanceOf(address(this));
}
function getUserBalance(address token, address user) public view returns (uint256) {
return _tokensAndBalances[token][user];
}
function withdraw(address token, uint256 value) public {
require(_tokensAndBalances[token][msg.sender] >= value, "User doesn't have enough balance");
IERC20 erc20 = IERC20(token);
_tokensAndBalances[token][msg.sender] -= value;
erc20.transfer(msg.sender, value);
}
function transferTo(address token, address to, uint256 value) public {
require(_tokensAndBalances[token][msg.sender] >= value, "User doesn't have enough balance");
IERC20 erc20 = IERC20(token);
_tokensAndBalances[token][msg.sender] -= value;
erc20.transfer(to, value);
}
function deposit(address token, uint256 value) public {
IERC20 erc20 = IERC20(token);
erc20.transferFrom(msg.sender, address(this), value);
_tokensAndBalances[token][msg.sender] += value;
}
}Creating the files
Creating the contract header and registering
Implementing the contract constructors and dumping function
Implementing the contract functions
Calling functions from another contract
Creating contracts on the fly
Registering the contract's functions
Compiling and deploying
Last updated