MENU

Deploy Solidity helloWorld to Ethereum testnet

January 22, 2021
0
1688
0
Building on from the previous article on creating a helloWorld smart contract, here we will show how to deploy a contract to an Ethereum testnet. The testnet we will use is called Ropsten but there are others can you can choose such as Koven, Rinkeby or Goerli. Step 1: Install Metamask Metamask is a browser plugin that can serve as a crypto wallet and also as a connection to various blockchains to communicate and sign transactions. Install this by visiting: https://metamask.io/download.html Step 2: Change the Metamask network Change the network to the Ropsten testnet. Step 3: Get some test ether To get some test ether, click buy, and then click Get Ether in the Test Faucet section below. Step 4: Deploy your smart contract Change your environment from Javascript VM to Injected Web3. Now when you click deploy, Metamask will pop up and ask you to confirm the transaction. Click confirm. Step 5: Interacting with your smart contract Now you can interact with your smart contract the same way but each time you try and store a message, you will have to pay a small fee (gas) and sign the transaction using Metamask. Here is a link to the smart […]
Read More ›

Solidity HelloWorld (updated for 2021) with Remix

December 22, 2020
0
1707
0
It is really easy to get up and running with Solidity smart contracts using Remix which is an online IDE for developing smart contracts in Solidity. If you visit https://remix.ethereum.org/, you’ll see some sample code Removing all the comments to make it less scary, you can see that the name of the contract is “Storage”, there is one variable called number of type uint256 which stands for an unsigned integer that is 256 bits long and then two functions. One to store the number and one to retrieve the number. And that is it really. Read this explanation of functions to demystify the key words such as public, view and returns and this smart contract should be easy to understand. Below I’ve changed the code to store a string instead and changed the contract name to “helloWorld” To run this, you will have to compile the contract first. Then deploy the contract. Now you can store a string and retrieve the string.
Read More ›

Solidity events

June 30, 2020
0
4549
0
In Solidity, firing or emitting events is a handy tool that you can employ not only to log messages for simple debugging but more importantly Dapps or anything connected to the Ethereum JSON-RPC API can listen to these events and act accordingly. Events can also be indexed so that the event history is searchable later as well. Here is a very simple example of creating an event. pragma solidity ^0.6.0; contract EmitEvent { event log(); function triggerLog() public { emit log(); } } You first have to declare the event and then give it a name along with the parameters you want to pass around. The above example does not have any parameters. The example below has one parameter. pragma solidity ^0.6.0; contract EmitEvent { event log(string _logmessage); function triggerLog() public { emit log("hi"); } } The event gets displayed in the logs of the transactions in remix. Watch the video below for a walkthrough.
Read More ›

Which is cheaper, a public function or an external function?

June 17, 2020
0
4933
0
Here is a quick video explaining which function is cheaper, a public function or an external function in Solidity. I’ve also included a demonstration to prove it as well.
Read More ›

Installing Hyperledger Besu

January 18, 2020
0
6526
0
Installing the Enterprise Ethereum client Hyperledger Besu may seem daunting at first but the key is to break it down step by step. The following is a set of short videos demonstrating how this can be done. a) System Requirements You’ll ideally need 8Gb of Ram and a lot of hard drive space. Around 3Tb if you want to do a full sync with Ethereum mainnet. b) Install Besu on MacOS Installing on a Mac is very quick. You’ll need Homebrew (https://brew.sh) and also Java 11 or above (brew cask install adoptopenjdk) Then all you do is run: brew tap hyperledger/besu brew install besubrew -- version c) Uninstalling Besu on MacOS Here are the shortcut commands to uninstall Besu: brew cask uninstall adoptopenjdk brew untap hyperledger/besu brew uninstall besu d) Building Besu from source Here are the shortcut commands to install Besu from source: > git clone --recursive https://github.com/hyperledger/besu.git > cd besu > ./gradlew installDist > cd build/install/besu > ./bin/besu
Read More ›

Installing Besu quick commands

December 25, 2019
0
7448
0
besu --version //check if Besu is installedbrew uninstall besu //uninstall Besubrew install besu //install Besu (assuming you have already tapped it first with brew tap hyperledger/besu)brew cask install adoptopenjdk Starting Besu To start Besu, just type besu This will start Besu pointing it to mainnet. This means that the blockchain will start to synchronise with the real Ethereum blockchain. A database folder (where the blockchain will be stored) will appear at usr/local/Cellar/besu/1.3.8/ which is where homebrew installed besu. For testing purposes, start Besu with the network flag of dev besu --network=dev The other option is to use a config file and then specific the network, as well as other parameters there. data-path="besudata"network="dev"miner-enabled=trueminer-coinbase="0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"rpc-http-cors-origins=["all"]host-whitelist=["*"]rpc-ws-enabled=truerpc-http-enabled=true Then reference the config file with: besu --config-file="/User/sean/config.toml" Note that flags in the command line override flags in the config file. For a complete list of other command line options, visit: http://besu.hyperledger.org/en/stable/Reference/CLI/CLI-Syntax/ Checking Besu network To confirm the network you are connected to, you want to query the Besu API for the net_version. curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}' localhost:8545 You can find out what net_version does along with all the other API options here. However, in order for this to work, Besu must be started with the flag: […]
Read More ›

Strategic planning in Atlanta

December 12, 2019
0
5962
0
Academy decided to hold a strategic offsite in Atlanta to discuss how to tackle the OneMillionDevs initiative and strategically plan for 2020. There is always a lot going on in the blockchain space and it is always good to get up to speed by discussing and sharing the latest and greatest with my esteemed peers. It was also a great time to reflect on the year that has been and to start planning for the new year ahead. It was also an opportunity to connect with one another, especially since we all work remotely. We cosied up in a very large house (courtesy of AirBnb) that had 9 bed rooms! Houses in America are big!!! We got down to work straight away with 3 days of intense brain power workout. We even cancelled our planned visit to Coke world. The last group dinner on the final night with a fantastic group of humans.
Read More ›

What is constantinoplefixblock?

November 25, 2019
0
7566
0
If you have ever looked inside a blockchain genesis file, typically called genesis.json or in the case of a private network, privateNetworkGenesis.json, you will have seen lots of configuration parameters. Some are obvious but others a little more mysterious. Take for example this genesis file for a private network: Have you ever wondered what constantinoplefixblock is? It turns out that these are called “Milestone Blocks”. In a public network, these specifies the block at which the network changed protocols. For example, In a private network though, the milestone block defines the protocol version for the network  so it is normally set to 0 (zero) meaning version 0 of the Constantinople protocol. In other words, your chain won’t be hard-forking for these changes, so leave as 0 (zero). Another interesting note in the private genesis file is fixeddifficulty which is used to specify a fixed difficulty in private networks using Ethash which overrides the difficulty field.
Read More ›

Neat EthOn Modelling Concept

June 16, 2019
0
8927
0
Here is a neat overview of the major Ethereum concepts in blockchains. Ref: https://media.consensys.net/ethon-introducing-semantic-ethereum-15f1f0696986
Read More ›

TutorialToken smart contract with Truffle

June 10, 2019
0
8628
0
If you are trying to go through the token tutorial by Truffle there are a few things to note. If you follow the instructions fully, it will not work. Firstly the pragma version needs to be updated from 0.4.24 to 0.5.0. This is because if you install Truffle, it will install the latest version of solc, the solidity compiler which will be 0.5.8 at this time of writing. Next, if you run “npm run dev”, you might encounter and error like ERR! tutorialtoken@1.0.0 dev: `lite-server`. If you do, you’ll want to fix it by doing this. Then you’ll want to make sure that Metamask is either not yet installed or that it is disabled. Otherwise the tokens will appear in Metamask instead of on the webpage. Finally, you need to change the port in app.js from 9545 to 7545 which is the Ganache port. The tutorial is great but is several years old so needs these modifications.
Read More ›

tutorialtoken@1.0.0 dev: `lite-server`

June 7, 2019
0
8300
1
If you are going through the Truffle TokenTutorial smart contract and you can’t run “npm run dev” because you get the following error below, it can be very frustrating. You follow all the instructions to the letter but get this strange error such as: – Cannot find module ‘../lib/lite-server’– ERR! code ELIFECYCLE– ERR! tutorialtoken@1.0.0 dev: `lite-server` Seans-MacBook-Pro:tokentutorial sean$ npm run dev > tutorialtoken@1.0.0 dev /Users/sean/Dropbox/CodeDropBox/truffle/tokentutorial > lite-server internal/modules/cjs/loader.js:626 throw err; ^ Error: Cannot find module '../lib/lite-server' Require stack: - /Users/sean/Dropbox/CodeDropBox/truffle/tokentutorial/node_modules/.bin/lite-server at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15) at Function.Module._load (internal/modules/cjs/loader.js:527:27) at Module.require (internal/modules/cjs/loader.js:681:19) at require (internal/modules/cjs/helpers.js:16:16) at Object. (/Users/sean/Dropbox/CodeDropBox/truffle/tokentutorial/node_modules/.bin/lite-server:7:1) at Module._compile (internal/modules/cjs/loader.js:774:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10) at Module.load (internal/modules/cjs/loader.js:641:32) at Function.Module._load (internal/modules/cjs/loader.js:556:12) at Function.Module.runMain (internal/modules/cjs/loader.js:837:10) { code: 'MODULE_NOT_FOUND', requireStack: [ '/Users/sean/Dropbox/CodeDropBox/truffle/tokentutorial/node_modules/.bin/lite-server' ] } npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! tutorialtoken@1.0.0 dev: `lite-server` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the tutorialtoken@1.0.0 dev script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/sean/.npm/_logs/2019-06-09T09_13_38_647Z-debug.log https://github.com/node-inspector/node-inspector/issues/1044 As with most computer problems, when all else fails, restart from the beginning. Here, a clean install of npm resolved this […]
Read More ›

Sublime and Solidity Syntax in 10 seconds

June 4, 2019
0
8597
0
If you are using Sublime, which is a very fast and lightweight text editor, to create smart contracts in Solidity, to get syntax highlighting, do the following: ⌘+⇧+P (command+shift+P) to bring up Sublime’s command palette, which is an interactive list whose purpose is to execute commands. Start typing “install” and select “Install Package”. Then wait a few seconds before another text box appears before typing “Ethereum” and select the first option. Before: After: To check that it has been installed, bring up the command palette and type “remove” and select remove package and Ethereum should appear indicating that it has been successfully installed.
Read More ›

ConsenSys Academy at Ethereal New York

May 23, 2019
0
8829
0
I was fortunate enough to have the opportunity to speak at a blockchain conference called Ethereal Summit in New York recently. It was a two day conference that focused on developments in the blockchain space and was also part of the run up to blockchain week where a three day conference run by Coindesk called “Consensus” and a one day Token Summit conference was held. I shared some of the work we’ve been doing at ConsenSys Academy with a talk called “Reinventing the way we learn blockchains”. Here is the presentation for those interested. I also had the chance to visit ConsenSys HQ in Brooklyn which is fast becoming a must see tourist spot for all those in the blockchain space. 10 points for guessing which graffiti covered door is the entrance into the office! If you can’t figure it out, use the next picture as a clue. I’m sitting outside on the front steps. In New York, I also got to meet the rest of the Academy team for the first time in 3D. ie “IRL” aka In Real Life. I must say that I’m very privileged to work with a bunch of very talented and dedicated people from […]
Read More ›

Sydney Edcon 2019 Wrap

April 19, 2019
0
8490
1
The week of April 8th was Blockchain week in Sydney with many blockchain events culminating in Edcon where Vitalik and his research crew shared their vision of Ethereum 2.0 The Hackathon The week started out with a hackathon at the University of New South Wales (UNSW) where there were lots of teams hacking it out for various cash prizes. What is funning is the story of CryptoChicks. One of the most inspiring team was CryptoBeast mentored by a good friend Nick Addison who entered his son and 3 of his mates. They were all 11 years old and ended up coming third! The most important question though is what do you do with a 6 ft cheque of $2000? Well, it may not provide much warmth as a blanket but it sure does look good! On Wednesday evening, ConsenSys put on an event at Tyro Fintech Hub with a number of guest speakers. Edcon Thursday was when Edcon started and boy did it start with a bang. It actually started with a hilarious rap! The schedule was very full on where the heavy hitters dominated the first day. You had to bring your thinking caps though because some of the […]
Read More ›

Training trainers at SK in Korea

February 25, 2019
0
10129
0
I had opportunity to provide blockchain train the trainer to SK Global in Korea which is another level up from regular training. SK Global or SK Holding is one of the largest conglomerates in South Korea comprising of around 95 subsidiaries. SK Global has more than 70,000 employees and 113 offices worldwide. My esteemed colleagues Coogan and Luiz, travelled to Korea in December and provided blockchain training to SK. They did an amazing job which pathed the way for part 2 of this training. I arrived on Sunday morning after taking the red eye from Sydney to Tokyo and then connecting to Seoul. I had to be rerouted due to weather conditions at Sydney airport but that is another story in itself. Seoul was cold! It may not feel like it if you’re only outside for a few minutes but very quickly you can feel your ears tingle. On day 1 we went through the plan for the week and reviewed the 1 day non technical edition as well as the first day of smart contracts for developers. The trainees had already gone through the material so this served as a refresher and provided more opportunities for in-depth discussions on […]
Read More ›

Remix MSTORE bug

February 12, 2019
0
8737
1
I was looking into strings v bytes into a bit more detail and started comparing the gas consumption between them. The following code was used: pragma solidity ^0.5.0; contract StringVersusByte { string constant _string = "hello"; bytes32 constant _bytes = "hello"; function getAsString() pure public returns(string memory) { return _string; } function getAsBytes() pure public returns(bytes32) { return _bytes; } } After deploying, I executed the the getAsBytes() first and saw that the execution cost was 196 gas. I then looked to confirm this by stepping through the debugger and summing up the cost of all the op codes. What I discovered was that it summed up to 172 and not 196 gas. I was out by 24 gas. I then looked at the debugger and looked at the remaining gas field. It should reduce by the amount of gas but in step 3 it doesn’t. It reduces by 12 instead of 3 as can be seen in the video. The culprit opcode is MSTORE and there are 2 MSTORE which makes up the missing 24 gas. In the video, the remaining gas decreases by the expected amount until it reaches step 3. This issue is highlighted as a bug […]
Read More ›

EVM Illustrated

January 24, 2019
0
8568
0
Here is a neat 116 slide deck that goes through what Ethereum is, the EVM and how it all works by Takenobu Tani. It is a pretty useful explanation but does go into a lot of detail such as endian and byte addressing which is quite low level. Here is a link to the pdf and here is the GitHub.
Read More ›

Where is DeployedAddresses.sol?

January 11, 2019
0
9470
2
If you are creating test scripts in solidity, you may have come across these import statement: import "truffle/Assert.sol"; import "truffle/DeployedAddresses.sol"; import "../contracts/HelloWorld.sol"; The last one is easy to understand because it is your smart contract in the “contracts” folder but what about Assert.sol and DeployedAddresses.sol? First of all, “truffle” refers to the global truffle repo which can be found at usr/local/lib/node_modules/truffle. Assert.sol lives at: usr/local/lib/node_modules/truffle/build/Assert.sol The trick is, what about DeployedAddresses.sol? You won’t find this file in the global truffle repo and a terminal search will be chocolateless fruitless. The reason is because this file is dynamically created at test time. (Kindalike the geth.ipc file that gets generated when geth is running but disappears when geth is stopped). “truffle” is a meta package, ie “these packages do not contain actual software, they simply depend on other packages to be installed“. In fact, if you look at the deploy.js source code, you’ll see the DeployedAddresses file get created via the code. Source: https://github.com/trufflesuite/truffle/issues/471 https://github.com/trufflesuite/truffle-core/blob/b3ad375993ec42bc622c7674258edc7614944482/lib/testing/deployed.js https://askubuntu.com/questions/66257/what-is-the-difference-between-a-meta-package-and-a-package
Read More ›

Truffle Box at URL … doesn’t exist

January 2, 2019
0
9380
0
If you have just created a new folder and ran truffle init and got an error similar to below truffle init Downloading… Error: Truffle Box at URL https://github.com/truffle-box/bare-box.git doesn’t exist. If you believe this is an error, please contact Truffle support. at Request._callback (/usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-box/lib/utils/unbox.js:50:1) at Request.self.callback (/usr/local/lib/node_modules/truffle/build/webpack:/~/request/request.js:185:1) at Request.emit (events.js:189:13) at Request. (/usr/local/lib/node_modules/truffle/build/webpack:/~/request/request.js:1157:1) at Request.emit (events.js:189:13) at IncomingMessage. (/usr/local/lib/node_modules/truffle/build/webpack:/~/request/request.js:1079:1) at Object.onceWrapper (events.js:277:13) at IncomingMessage.emit (events.js:194:15) at endReadableNT (_stream_readable.js:1107:12) at process.internalTickCallback (internal/process/next_tick.js:72:19)   then try to do “npm uninstall -g truffle” and then “npm install -g truffle”. When I did this I got: Preparing to download ✔ Downloading ✔ Cleaning up temporary files ✔ Setting up box Unbox successful. Sweet! Frustrating that it happened in the first place!
Read More ›

Understanding basic functions in solidity

December 22, 2018
1
9525
0
Smart contracts are comprised mainly of functions so it is important to understand how to construct one and all the various options available. From the solidity documentation, the syntax of a function is as follows: function FunctionName([parameters]) {public|private|internal|external} [pure|constant|view|payable] [modifiers] [returns (<return types>)] What this means is that when creating a function, here are the required steps. Use the function keyword Provide a function name Provide parameters if required Set the function’s visibility. There’s 4 options to choose from. public, private, internal, or external: Set the behaviour of the function. Choose from view, pure, or payable. Add any applicable modifiers Add any applicable return types/parameters Here is a brief explanation of the different visibilities. Public: All (contracts can a call the function) Private: Only this contract Internal – only this contract and contracts deriving from it External – Cannot be accessed internally, only externally. Private is a subset of internal and external is a subset of public. For a more detailed and intriguing analysis of the difference between public and external check this. (TLDR: public uses more gas because it uses memory instead of calldata). (Check the docs for more details). The behaviours are defined as: View: Can read the state but will not modify storage state […]
Read More ›