Title Thumbnail Category Select Category General Bitcoin Ethereum Airdrops Gaming NFTs Wallets Staking Mining Bridges Nodes Hardware Software EVM Pi Network Smart Contracts Hedera Ledger AI Sepolia Testnets Mainnets Solana Chainlink MetaMask Base BeraChain Zaros Cardano Linea Subcategory Select Subcategory General Bitcoin Ethereum Airdrops Gaming NFTs Wallets Staking Mining Bridges Nodes Hardware Software EVM Pi Network Smart Contracts Hedera Ledger AI Sepolia Testnets Mainnets Solana Chainlink MetaMask Base BeraChain Zaros Cardano Linea IntroductionIn this guide, we're going to dive into Botanix and learn how to interact with the ongoing testnet. What is Botanix? Botanix Labs is developing a decentralized Layer 2 solution to enhance Bitcoin’s functionality, enabling it to support programmable finance. It aims to merge Ethereum’s EVM flexibility with Bitcoin’s security by creating the first fully decentralized, EVM-equivalent Layer 2 on Bitcoin. By leveraging Bitcoin’s Proof-of-Work (PoW) for settlement and decentralization, Botanix introduces a Proof-of-Stake (PoS) model where Bitcoin stakes are secured on the Spiderchain, a decentralized multisig network protected by randomly selected participants. This allows anyone to stake Bitcoin directly on the Bitcoin network. Step 1 - Claim TokensFirst, head over to the Botanix faucet and Sign in with Discord.After connecting Discord, it should connect with MetaMask and you can approve to add the testnet to your wallet.Now insert your wallet address to receive your test tokens. If you didn't receive funds, or require more, you can complete the daily wallet submission task on Galxe to receive a small amount of BTC. You can also request funds from the community using the #send-funds channel in the official Botanix Labs Discord server, but you will need to earn the Botanix Explorer role for Discord from completing Zealy tasks to access the #send-funds channel. Discord Roles To earn Discord roles, we should head over to Zealy and complete tasks there too. Complete the four questions in the Zealy "Seedling Ambassador Program" to earn the Seedling role in Discord. Step 2 - Bitzy Now we should have some test Bitcoin available in our wallet. Let's perform some swaps over at Bitzy. Simply connect your wallet, insert any available amount of BTC and hit "Swap". Step 3 - Palladium Now we need to head over to Palladium & connect wallet. Now we need to open a trove. Now press the Get Mock WBTC button to receive some test WBTC. Now input any available amount. For this guide, I will select 75% for WBTC and 90% for PUSD. Approve transaction with wallet. Now you should be able to see your active trove. Finally, go the Stake page and stake your PUSD. Step 4 - Spindle Finance Next we need to head over to Spindle Finance mint page. Here we can mint tUSDC (test USDC) and tWBTC (test wrapped Bitcoin). Now we need to Lend some of our test tokens. Step 5 - Rover Step 6 - Slogain Step 7 - Artura Step 8 - Deploy ContractNow we have some test funds, let's deploy a contract on Botanix.To do this, head over to: remix.ethereum.org & press New to create a new file.Name the file: Botanix-token.solNow just paste this code: pragma solidity ^0.4.24; //Safe Math Interface contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } //ERC Token Standard #20 Interface contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } //Contract function to receive approval and execute function in one call contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } //Actual token contract contract QKCToken is ERC20Interface, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; constructor() public { symbol = "QKC"; name = "QuikNode Coin"; decimals = 2; _totalSupply = 100000; balances[YOUR_METAMASK_WALLET_ADDRESS] = _totalSupply; emit Transfer(address(0), YOUR_METAMASK_WALLET_ADDRESS, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } } Make sure you replace the following values: Line 62: symbol = "QKC"; - Insert your own symbol here. Line 63: name = "QuikNode Coin"; - Choose your own token name. Line 64: decimals = 2; set the decimal (value in which tokens can be divided, 0 to 8 decimal units can be used) and establish a total supply value as you wish Line 65 _totalSupply = 100000; - Choose a total supply Line 66: balances[YOUR_METAMASK_WALLET_ADDRESS] = _totalSupply; Please change YOUR_METAMASK_WALLET_ADDRESS to your own wallet address (This one can be found in your MetaMask interface) Line 67: emit Transfer(address(0), YOUR_METAMASK_WALLET_ADDRESS, _totalSupply); Now go to the "Solidity Compiler" tab and change compiler to 0.4.24 & press "Compile Botanix-token.sol".Now go to the Deploy tab and change Environment to Injected Provider - MetaMask Outro That's all for this guide!If you found this tutorial helpful and informative, consider sharing it on social media. You can also stay updated on the latest content and discussions by following us on X (formely Twitter): @BitBlogxyz Disclaimer: This guide is provided strictly for educational purposes and should not be considered financial advice. The content is designed to offer insights into various web3 topics & projects. We do not recommend putting real money into random projects without conducting plenty of your own research first. It is crucial to make informed decisions based on your own understanding and risk tolerance. Add tags (optional) - 0/5 Testnets × Airdrops × Bitcoin × BTC × Botanix × Publish Save to drafts