<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jazz_Baba</title>
    <description>The latest articles on DEV Community by Jazz_Baba (@crudeboy).</description>
    <link>https://dev.to/crudeboy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F591352%2F9a34b257-5a5b-402f-bcf9-1e860723862a.jpeg</url>
      <title>DEV Community: Jazz_Baba</title>
      <link>https://dev.to/crudeboy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/crudeboy"/>
    <language>en</language>
    <item>
      <title>A Time-Lock Smart contract That generates funds for devs.</title>
      <dc:creator>Jazz_Baba</dc:creator>
      <pubDate>Fri, 02 Jun 2023 18:44:08 +0000</pubDate>
      <link>https://dev.to/crudeboy/a-time-lock-smart-contract-that-generates-funds-for-devs-36cm</link>
      <guid>https://dev.to/crudeboy/a-time-lock-smart-contract-that-generates-funds-for-devs-36cm</guid>
      <description>&lt;p&gt;A time lock smart contract is a tool that locks tokens or crypto currencies into a smart contract for a particular time frame. This is a very useful feature in prevention of impulsive token sales or transfer on a whim.&lt;br&gt;
The smart contract implemented allows external users to lock their Ethers in the smart contract and pay a small fee which goes directly to the developer of the smart contract. This could be a passive income generator for a smart contract developer.&lt;br&gt;
Many technical concepts are implemented in this smart contract, some are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using modifiers&lt;/li&gt;
&lt;li&gt;Preventing re-entrancy attacks&lt;/li&gt;
&lt;li&gt;Working with Dates in smart contracts.&lt;/li&gt;
&lt;li&gt;Using Structs and Mappings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The smart contract has the following features which can be used as a guide in understanding smart contracts and developing ideas which builds on this. The features are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A taxing system&lt;/li&gt;
&lt;li&gt;A time lock feature&lt;/li&gt;
&lt;li&gt;Funds transfer feature&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Also included is simple string concatenation in smart contracts and using emojis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transferring Ethers to the Smart contract
&lt;/h2&gt;

&lt;p&gt;The initial step to activating the smart contract lock feature is to credit the smart contract. The smart contract has a pay function that is &lt;em&gt;&lt;strong&gt;"payable"&lt;/strong&gt;&lt;/em&gt;. The first check in the pay function is to ensure the amount inputed is that same as the value the user pays into the smart contract. A require statement is used to achieve this. The second check is to ensure that the credit amount is at least the fixed tax associated with the funds lock functionality. This particular smart contract implements a fixed tax system which would be explained further in the article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lLLi-VkI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dkzzkmkfeua78bhpqf83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lLLi-VkI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dkzzkmkfeua78bhpqf83.png" alt="Image description" width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The smart contract allows seamless withdrawal of funds that are transferred to the smart contract when the lock feature has not been triggered. No lock fee or tax is imposed only transaction gas is deducted by the EVM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Triggering the Funds Lock feature
&lt;/h2&gt;

&lt;p&gt;The main course in this project is the Time Lock feature. This feature implements a struct that holds essential details of the user: the start time for the funds lock, the Lock interval, user balance. As soon as a user locks their funds in the contract, the variable &lt;em&gt;&lt;strong&gt;"hasLockedFunds"&lt;/strong&gt;&lt;/em&gt;  is set to true this is stored to be used to ensure the user has locked funds and has permission to trigger the withdraw functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v4kl5znP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x80jer1t3ps9tfqgwjw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v4kl5znP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x80jer1t3ps9tfqgwjw6.png" alt="Image description" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image above shows the use of a struct to encapsulate all the user details in the smart contract. &lt;br&gt;
The power of structs in smart contracts is unleashed when used with mappings and other structs. This is the simplest use case of a struct and a mapping. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4wnP1ock--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eougodxuct3o6b810p1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4wnP1ock--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eougodxuct3o6b810p1u.png" alt="Image description" width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above is the implementation of the funds lock functionality. the code above uses a time of &lt;strong&gt;&lt;em&gt;15 seconds&lt;/em&gt;&lt;/strong&gt; which is for testing while implementing the smart contract. The smart contract lock period is fixed at 365 days, this could be easily changed to accept a &lt;strong&gt;&lt;em&gt;"number of days"&lt;/em&gt;&lt;/strong&gt; variable value.&lt;/p&gt;

&lt;p&gt;To test the time Lock functionality you could set the lock time to &lt;strong&gt;&lt;em&gt;"15" seconds&lt;/em&gt;&lt;/strong&gt;, this would help the developer validate the time count down functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time lapse feature
&lt;/h2&gt;

&lt;p&gt;To help users of the smart contract know how far along their funds lock is there's a &lt;strong&gt;&lt;em&gt;"howManyDays"&lt;/em&gt;&lt;/strong&gt; feature. This feature helps the user get the number of days left before their funds are available for withdrawal. The functionality depends on a countdown timer which sets the &lt;strong&gt;&lt;em&gt;"funds release time"&lt;/em&gt;&lt;/strong&gt;, which is when the funds would become available. The countdown timer ensures the &lt;strong&gt;&lt;em&gt;"block.timestamp"&lt;/em&gt;&lt;/strong&gt; hasn't yet equalled or exceeded the set &lt;strong&gt;&lt;em&gt;"funds release time"&lt;/em&gt;&lt;/strong&gt;. The functionality uses &lt;strong&gt;&lt;em&gt;"int256"&lt;/em&gt;&lt;/strong&gt; and does a type casting to convert the difference &lt;strong&gt;&lt;em&gt;"fundsLockTime"&lt;/em&gt;&lt;/strong&gt; and the &lt;strong&gt;&lt;em&gt;"presentTime"&lt;/em&gt;&lt;/strong&gt;. The difference between these two variables would eventually spill into a negative vale and the "uint256" type would error on variable subtraction.&lt;br&gt;
Below is the code snippet for this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H4rCmVfV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwi2k9po1sisygl9hs0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H4rCmVfV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fwi2k9po1sisygl9hs0r.png" alt="Image description" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tax System(&lt;em&gt;&lt;strong&gt;payday for devs&lt;/strong&gt;&lt;/em&gt;)
&lt;/h2&gt;

&lt;p&gt;Smart contracts and tokens often implements a tax system that ensures the service rendered by the smart contract is billed to the end users of the contract. There are various taxing models that could be used, on this safe lock project a fixed tax system is implemented , which bills any Ether lock into the smart contract. A base fee of &lt;strong&gt;&lt;em&gt;0.00055ETH&lt;/em&gt;&lt;/strong&gt;(which is about &lt;strong&gt;&lt;em&gt;$10&lt;/em&gt;&lt;/strong&gt; as at writing this smart contract).&lt;br&gt;
This fee can only be withdrawn by the smart contract developer. The code includes a snip-bit of how to use emojis in a smart contract for you perusal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TWECJtbu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wev2x3q019csfh8hh9vx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TWECJtbu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wev2x3q019csfh8hh9vx.png" alt="Image description" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've followed the article all through, big up's. You can find the code on &lt;a href="https://github.com/crudeboy/Time_Lock_Wallet"&gt;github&lt;/a&gt;. You can reach me on &lt;a href="https://www.linkedin.com/in/jahswill-apata/"&gt;linkedIn&lt;/a&gt; and &lt;a href="https://twitter.com/Ogbeni_jazzwill"&gt;twitter&lt;/a&gt;. Looking forward to your comments and questions.&lt;br&gt;
The smart contract would work seamlessly on the Remix IDE. Further set ups would be required for a local IDE.&lt;/p&gt;

&lt;p&gt;See you soon, be on the look out for my next article on creating your own ERC20 token.&lt;/p&gt;

</description>
      <category>solidity</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>smartcontract</category>
    </item>
    <item>
      <title>How To write a Smart Contract Wallet with Ownership change</title>
      <dc:creator>Jazz_Baba</dc:creator>
      <pubDate>Mon, 22 May 2023 17:00:57 +0000</pubDate>
      <link>https://dev.to/crudeboy/how-to-write-a-smart-contract-wallet-with-ownership-change-1mhj</link>
      <guid>https://dev.to/crudeboy/how-to-write-a-smart-contract-wallet-with-ownership-change-1mhj</guid>
      <description>&lt;p&gt;A smart contract Wallet can be defined as a device or application that lets users customise the way they would prefer to manage their digital assets. &lt;/p&gt;

&lt;p&gt;One very important skill of a smart contract developer is understanding a understanding transactions in the EVM, having a sound knowledge of gas use and optimisation, harnessing the power of low level calls, understanding the security risks and sticking to safe smart contract writing patterns. All this principles are covered in this simple solidity project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;The projects implementation is broken into 4 sections:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Implementing a smart contract owner and restricting certain functionalities to the owner only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allowing the smart contract to receive funds from EOA and other contracts. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The funds transfer functionality&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The change of owner voting system implementation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Implementing a smart contract owner
&lt;/h2&gt;

&lt;p&gt;The nature of a smart contract that makes it not modifiable after deployment necessitates very important functionalities to be "Authorised" before access is granted. The lowest level of access grant in a smart contract is the implementation of a smart contract owner.&lt;/p&gt;

&lt;p&gt;The owner of a smart contract is the address that deploys the smart contract to the blockchain. The solidity contract allows for the implementation of constructor. The constructor enables a black of code to be implemented first in the creation of the smart contract and only once. A variable owner of type address is created, this is a state variable and of type address. The owner is assigned the value msg.sender using the global variables available in a smart contract.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj9fl55ynyituf6qehsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjj9fl55ynyituf6qehsg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Funds Receive functionality
&lt;/h2&gt;

&lt;p&gt;A smart contract has an address , hence can receive funds and make transactions. There are a few ways a smart contract can be made to receive funds. One is by creating a "depositFund" function that is labelled payable, the other is by using a payable fall back function. One other option which was utilised in this smart contract is to use a receive functionality. The receive function differs from a fallback in that it cannot receive data, and is the first default function called when a low level payment to the smart contract is triggered.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8apzu1kgo842tlxhw6nv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8apzu1kgo842tlxhw6nv.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The receive function does not access storage or make a function call, hence the 2300 gas stipend would be sufficient for the transaction. None the less, it is a better practice to use low level function call where the transaction sender attaches more gas to the send function in a contract to cater for additional cost on fund transfer to a contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  The funds transfer functionality
&lt;/h2&gt;

&lt;p&gt;the transfer functionality is a function that utilizes many require statement to ensure proper checks are made before funds are transfers.&lt;br&gt;
Three require checks are made: the first ensures that the amount to be transferred is less or at most equal to the funds in the smart contract.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehcysaa4fm9kj0zlol9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehcysaa4fm9kj0zlol9i.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second require statement checks the mapping created that allows specific addresses to be recipients of the smart contract funds. The mapping "isAllowedToSend" is used to grant permission to withdraw funds by the smart contract owner. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckl53cuid3xp00gs6odg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckl53cuid3xp00gs6odg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuose3vay2vqduwor5iqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuose3vay2vqduwor5iqp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The third require statement ensures that the amount to be transferred to an account is less than or equals the amount the owner has previously set.&lt;/p&gt;

&lt;p&gt;To prevent the re-entrancy attack where, as a result of excess gas provided for transactions with external contracts they can still access the source contract and try to change state variables. Following the best practice the transfer functionality interacts last with external contracts.&lt;br&gt;
Firstly we deduct the amount to be transferred from the smart contract before the actual transfer transaction is made.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuixc4ozisb5m5v546x8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuixc4ozisb5m5v546x8.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhfuyqx1nmow0j981aqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhfuyqx1nmow0j981aqn.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Transfers can be done using at leat three methods:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;_address.transfer()&lt;/li&gt;
&lt;li&gt;_address.send()&lt;/li&gt;
&lt;li&gt;_to.call{value: _amount, gas: 100000}(payload);&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The third methods is referred to as a low level call. This method is usually used when ever you have no knowledge of what address the recipients of your funds transfer. When the transfer is done to other EOA(Externally owned Addresses) then any of the methods above is safe, if the transfer is to a smart contract, then the transaction would fail if the receive or fallback functionality interacts with the contract. The reason for this failure is that basic transfer functionalities only make the stipend gas available for transactions, only low level calls can be used to include a stipulated gas cost with the transaction.&lt;/p&gt;

&lt;p&gt;The response of a low level call, must be assigned to check if the transaction was successful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rihk27uzijgao4cjgdd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rihk27uzijgao4cjgdd.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The change of owner voting system implementation.
&lt;/h2&gt;

&lt;p&gt;The smart contract implements a simple voting system that allows for change of ownership. This could easily be a useful feature when the governance of a smart contract need to be changed, or owner demise. &lt;br&gt;
The voting system ensures the owner of a smart contract selects at least three guardians who have the ability to elect the next address as the smart contract owner.&lt;br&gt;
As soon as an address has 3 guardians selection, then the address becomes the new smart contract owner and perform functions restricted to the smart contract owner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcbgjtunh66e255fyz5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcbgjtunh66e255fyz5g.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0m7sfeo443i76dv6u8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0m7sfeo443i76dv6u8u.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl23bc55v1aenj0sihu0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl23bc55v1aenj0sihu0o.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is the link to the smart contract &lt;a href="https://github.com/crudeboy/Solidity-Wallet-sample" rel="noopener noreferrer"&gt;code on Github&lt;/a&gt;. Feel free to reach out to me on &lt;a href="https://www.linkedin.com/in/jahswill-apata/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Further articles to this would be published, deploying a smart  contract to a local blockchian, deploying to a test net such as Sepolia, deploying to a layer 2 solution (ZK SNARK). &lt;/p&gt;

</description>
      <category>web3</category>
      <category>solidity</category>
      <category>ethereum</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
