DEV Community

Cover image for Deployed a Simple Online Wallet on XinFin XDC Network
MahaLakshmi Perumal
MahaLakshmi Perumal

Posted on

1

Deployed a Simple Online Wallet on XinFin XDC Network

created a #SmartContract in Solidity language for a Simple Online Wallet to store XDC, and successfully deployed on XinFin XDC Network under the injected web 3 environment.
Check the code:

`pragma solidity ^0.5.12;
contract SafeMath {
function add(uint a, uint b) internal pure returns (uint c) {
c = a + b;
require(c >= a);
}
function sub(uint a, uint b) internal pure returns (uint c) {
require(b <= a);
c = a - b;
}
function mul(uint a, uint b) internal pure returns (uint c) {
c = a * b;
require(a == 0 || c / a == b);
}
function div(uint a, uint b) internal pure returns (uint c) {
require(b > 0);
c = a / b;
}
}
contract simpleOnlineWallet is SafeMath {

address payable internal owner;
string internal ownerName;
string internal dappsName;
uint256 internal reserveToken;
uint32 internal decimals;
event TransferToken(address source, address destination, uint amount); // BC will log event transferToken
struct account {
    string name;
    uint256 token;
}
mapping(address => account) internal myAccount;
constructor () public {
    owner = msg.sender;  // the one submited this smart contract into BC
    ownerName = "iExploTech BC Tutorial";
    dappsName = "Simple Online Wallet Tutorial";
    decimals = 3; // 3 precision point of fraction number
    reserveToken = 1000000 * 10**uint(decimals);  // 1 Million Tokens with 3 precision point of fraction number. e.g. 0.001 cent
    emit TransferToken(address(0), owner, reserveToken);  // publish generated tokens to BC logs
}
modifier onlyOwner() {
    require(msg.sender == owner); // only smart contract owner is authorized to execute functions
    _;
}
// require gas to execute, only smart contract owner is authorized to add new account and disperse new tokens
function addAccount( string memory newName, address newAddress, uint256 newToken) public onlyOwner {   
    if(newToken <= reserveToken) {
        myAccount[newAddress].name = newName;
        myAccount[newAddress].token = newToken;
        reserveToken = sub(reserveToken, newToken); //reserveToken = reserveToken - newToken;
    } 
    else
        revert("Not Enough Reserve Token"); // will undo all state changes, it will refund any remaining gas to the caller
}
// require gas to execute, only smart contract owner is authorized to change account name
function changeAccountName( string memory newName, address newAddress) public onlyOwner {
        myAccount[newAddress].name = newName;
}
// require gas to execute, only smart contract owner is authorized to disperse additional tokens
function disperseToken(address newAddress, uint256 newToken) public onlyOwner {   
    if(newToken <= reserveToken  && newToken!= 0) {
        myAccount[newAddress].token = newToken;
        reserveToken = sub(reserveToken, newToken); //reserveToken = reserveToken - newToken;
    } 
    else
        revert("Not Enough Reserve Token"); // will undo all state changes, it will refund any remaining gas to the caller
}
function transferToken(address newRecipient, uint256 newToken) public {
    if(myAccount[msg.sender].token >= newToken && newToken!= 0) {
        myAccount[newRecipient].token =  add(myAccount[newRecipient].token, newToken); // myAccount[newRecipient].token = myAccount[newRecipient].token + newToken;
        myAccount[msg.sender].token = sub(myAccount[msg.sender].token, newToken); // myAccount[msg.sender].token = myAccount[msg.sender].token - newToken;
        emit TransferToken(msg.sender, newRecipient, newToken);  // publish transferred tokens to BC logs
    } else
        revert("Not Enough Token"); // will undo all state changes, it will refund any remaining gas to the caller
}
function displayReserveToken() public onlyOwner view returns (uint256 ReserveToken) {
    return reserveToken;
}
function displayMyAccountInfo () public view returns (string memory Name, address Account, uint256 Eth_Wei, uint256 Token) {
    return (myAccount[msg.sender].name, msg.sender, msg.sender.balance, myAccount[msg.sender].token);
}
function displayOwner() public view returns (string memory Name, address Account, string memory DAppsName) {
    return (ownerName, owner,  dappsName);
}
// Destroy smartcontract in blockchain. This smart contract cannot be accessed after this command. Old data still exist in blockchain.
function kill() public onlyOwner {
        selfdestruct(owner);
}
Enter fullscreen mode Exit fullscreen mode

}`

AWS Q Developer image

Your AI Code Assistant

Automate your code reviews. Catch bugs before your coworkers. Fix security issues in your code. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay