Contracts
Profile
this contract is deployed for each user when registering with GOSH. It stores the user's name and its public keys.
getAccess() returns(mapping(uint256 => uint8))
RETURNS:
the list of all the user's public keys with their numbers.
It is necessary to take the zeroth pubkey from the list
VersionController
a contract version manager used when upgrading GOSH smart contracts
getProfileAddr(string name) returns(address)
The function for getting the address of the user's *Profile***
PARAMETERS:
name
(string) - user's name
RETURNS:
the address of the user's Profile contract
ELOCK
is a GOSH L2 smart contract on Ethereum Blockchain. It receives deposits from users, manages withdrawals, and locks user funds. ELOCK also counts its total balance, and total transaction count and stores root Merkle proofs, withdrawal smart contract code hash, etc. for L2 synchronization.
deposit(uint256 pubkey)
Allows a user to deposit Ether
(transferred as value) into the Elock-contract for locking in it.
The corresponding amount of wrapped tokens (WETH
) in GOSH will be minted for the amount of the
blocked funds.
PARAMETERS:
pubkey
(uint256) - the recipient's public key in GOSH. Used to derive the address of the user's token wallet for minting wrapped tokens to it.
example of calling the ELock contract in Ethereum
const elock = new data.web3.instance.eth.Contract(
ELockAbi.abi,
AppConfig.elockaddr,
)
const edata = elock.methods.deposit(data.summary.to.user.value.pubkey).encodeABI()
const receipt = await data.web3.instance.eth.sendTransaction({
from: data.web3.address,
to: AppConfig.elockaddr,
value: data.web3.instance.utils.toWei(data.summary.from.amount, 'ether'),
data: edata,
gasLimit: 100000,
maxPriorityFeePerGas: 25000,
})
depositERC20(address token, uint256 value, uint256 pubkey)
Allows a user to deposit ERC20 tokens into the Elock-contract for locking in it. The corresponding amount of wrapped tokens in GOSH will be minted for the amount of the blocked funds.
Before calling deposit, the specified number of tokens must be available for transfer for the Elock
address.
PARAMETERS:
token
(address) - address of the ERC20 token contract.value
(uint256) - deposited number of tokens.pubkey
(uint256) - the recipient's public key in GOSH. Used to derive the address of the user's token wallet for minting wrapped tokens to it.
withdrawERC20(address token)
Requests the withdrawal of the specified tokens for the caller (msg.sender
).
Tokens must be approved for withdrawal. The commission must be attached to the function call.
PARAMETERS:
token
(address) - address of the ERC20 token contract.
getERC20Approvement(address token, address recipient) returns (uint value, uint commission)
For the specified token and recipient, it returns the number of tokens available for withdrawal (withdrawERC20) and the commission to be transferred for the withdrawal function.
PARAMETERS:
token
(address) - address of the ERC20 token contract.recipient
(address) - the address of the recipient of the withdrawn tokens
RETURNS:
value (uint256) - the number of tokens approved for withdrawal.
commission (uint256) - the amount of commission for withdrawal.
getTokenRoots() returns (address[] memory roots)
The function returns an array of addresses where each address represents a supported ERC20 token in GOSH Ethereum L2.
RETURNS:
roots (address[]) - list of addresses of ERC20 tokens
GLOCK
is a set of special contracts on GOSH Blockchain.
Aside from managing TIP-3 distributed tokens they also manage the deposits and withdrawals assets of users.
Contract Checker.sol
receives an external message from Proposer
with Ethereum blockchain proofs signed by the Ethereum Committee, checks the hash of the blocks lined up in the chain, and deploys the contract Proposal.sol
that validators check and vote for the Ethereum blocks in GOSH then receives a list of verified transactions and send a message to the root contract RootTokenContract.cpp
Checker
getRootAddr(RootData data) returns(address)
The function returns TIP-3 root contract address
PARAMETERS
RootData.name
(string) - ERC20 token name;RootData.symbol
(string) - ERC20 token symbol;RootData.decimals
(uint8) - ERC20 token decimals;RootData.ethroot
(uint256)- ERC20 token address;
RETURNS
address TIP-3 root for wrapped ERC20 token in GOSH
RootTokenContract
is a smart contract on GOSH that manages user withdrawals. It receives TIP-3 transactions, verifies them and adds transactions to the counter index.
Also it deploys the TIP-3 wallet contract (TONTokenWallet.cpp
) and sends wrapped tokens there.
Info
address for TIP-3 token ETH
:
getWalletAddress(uint256 pubkey, address_opt owner)
The function for getting the user's TIP-3 wallet address
PARAMETERS:
pubkey
- user's public keyowner
- optional parameter, not used
RETURNS:
user's wallet address
TONTokenWallet
is a custom TIP-3 contract that runs in GOSH Masterchain. Allows to manage TIP-3 tokens and transfers it to Ethereum for withdrawal
transferToRecipient(
address_opt answer_addr,
Tip3Creds to,
uint128 tokens,
uint128 evers,
uint128 keep_evers,
bool deploy,
uint128 return_ownership,
opt
)
The function for deploying empty TIP-3 wallet to another user
PARAMETERS:
answer_addr
- Answer address, (should benull
)to
- Recipient credentials (pubkey + owner (should benull
))tokens
- Amount of tokens to transfer, (should be0
)evers
- Native funds to process. For internal requests, this value is ignored and processing costs will be taken from attached valuekeep_evers
- Evers to keep in destination walletdeploy
- (should betrue
) then the contract will send acceptTransfer message with StateInit to also deploy new TIP-3 wallet (if it doesn't already exist) with the provided recipient public key and recipient internal ownerreturn_ownership
- Return ownership - to decrease lend ownership for the caller contract (additionally), (should be0
)notify_payload
- (optional) < Payload (arbitrary cell) - if specified, will be transmitted into dest owner's notification, (should be0
)
transfer(
address_opt answer_addr,
address to,
uint128 tokens,
uint128 evers,
uint128 return_ownership,
opt
)
The function transfers the TIP3-tokens between TIP-3 user wallets.
PARAMETERS:
answer_addr
- (optional) Answer address (should benull
)to
- Destination TIP-3 wallet addresstokens
- Amount of tokens to transferevers
- Native funds to process. For internal requests, this value is ignored and processing costs will be taken from attached valuereturn_ownership
- Return ownership - to decrease lend ownership provided for the caller contract (additionally) (should be0
)notify_payload
- Payload (arbitrary cell) - if specified, will be transmitted into dest owner's notification (should benull
)
burnTokens(uint128 tokens, uint256 to)
The function burns tokens for transfer to Ethereum
PARAMETERS:
tokens
- amount WETH, which will be transferred to Ethereumto
- the address of the recipient's wallet in Ethereum
The function returns information about the TIP-3 wallet
RETURNS:
the data structure:
struct details_info {
string name; // Token name.
string symbol; // Token short symbol.
uint8 decimals; // Decimals for ui purposes. ex: balance 100 with decimals 2 will be printed as 1.00.
uint128 balance; // Token balance of the wallet.
uint128 locked; // Locked token balance of the wallet.
uint256 root_pubkey; // Public key of the related RootTokenContract.
address root_address; // Address of the related RootTokenContract.
uint256 wallet_pubkey; // Public key of wallet owner (User id for FlexWallet).
address_opt owner_address; // Owner contract address for internal ownership, will be 0:0..0 otherwise.
opt<uint256> lend_pubkey; // Lend ownership pubkey.
lend_owners_array lend_owners; // All lend ownership records of the contract.
uint128 lend_balance; // Summarized lend balance to all targets.
// Actual active balance will be `balance - lend_balance`.
opt<bind_info> binding; // Flex binding info.
uint256 code_hash; // TIP-3 wallet code hash to verify other wallets.
uint16 code_depth; // TIP-3 wallet code depth to verify other wallets.
int8 workchain_id; // Workchain id.
}
Wallet for Acki Nacki test-network
This is a wallet for receiving test tokens on the https://ackinacki-testnet.tvmlabs.dev/
transferToRecipient(
address_opt answer_addr,
Tip3Creds to,
uint128 tokens,
uint128 evers,
uint128 keep_evers,
bool deploy,
uint128 return_ownership,
opt
)
The function for deploying empty TIP-3 wallet to another user
PARAMETERS:
answer_addr
- Answer address, (should benull
)to
- Recipient credentials (pubkey + owner (should benull
))tokens
- Amount of tokens to transfer, (should be0
)evers
- Native funds to process. For internal requests, this value is ignored and processing costs will be taken from attached valuekeep_evers
- Evers to keep in destination walletdeploy
- (should betrue
) then the contract will send acceptTransfer message with StateInit to also deploy new TIP-3 wallet (if it doesn't already exist) with the provided recipient public key and recipient internal ownerreturn_ownership
- Return ownership - to decrease lend ownership for the caller contract (additionally), (should be0
)notify_payload
- (optional) < Payload (arbitrary cell) - if specified, will be transmitted into dest owner's notification, (should be0
)
sendTransaction