MENU

Solidity events

June 30, 2020
0
2294
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
2603
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
4312
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
4857
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
3923
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 team was always fun. Here we are looking lost outside a place called “Slutty Vegan”. The queue was too long so we decided to go elsewhere. The last group dinner on the final night. A fantastic group of humans.
Read More ›

What is constantinoplefixblock?

November 25, 2019
0
5486
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
7846
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
8019
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
7584
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
7638
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
7957
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
7776
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
9237
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
8119
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
7884
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
8595
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
8670
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
0
8785
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 ›

Checklist for developing smart contracts

December 15, 2018
0
7710
0
To start developing smart contracts in solidity, here is a check list of applications that will make your life easy. Note: Instructions here are geared towards Mac operating system. Remix Remix is an online Integrated Development Environment (IDE) where solidity smart contracts can be written. It can then be compiled and tested locally or combined with Metamask and deployed on testnet for instance. Editors – Atom or Sublime Atom or Sublime are popular editors. Atom is open source (ie free) while Sublime costs $80USD. While solidity smart contracts are written in remix, editors are useful to handle json, javascript and regular text files. Metamask Metamask is a browser extension that allows smart contracts to connect to various blockchains. It can be thought of as a bridge connecting the two together. Geth Geth or Go Ethereum is an Ethereum client which when run, acts as a node to connect to the Ethereum blockchain. It can be configured to point to mainnet, testnet or even set up in private mode. The following command will tell you if you have geth installed or not. > geth version Geth Version: 1.8.14-stable Architecture: amd64 Protocol Versions: [63 62] Network Id: 1 Go Version: go1.10.3 Operating […]
Read More ›

Blockchain training with LG in Korea

November 9, 2018
0
7478
0
Even as the crypto market continues to tank, the technology that underpins it is still going strong. Lots of very smart people are working very hard behind the scenes and lots more want to learn about blockchains. I had the chance to help train LG CNS (Consulting and Solutions, one of the business units) who were particularly interested in Quorum which is used for creating permissioned blockchains. From our hotel room we could see the many buildings of LG CNS. Security was very tight. Not surprising as it was around their R&D facility. We had to go through airport style x-ray scanners when leaving the building every day and have our laptops checked to make sure the serial number matched the one we registered with them.   The biggest challenge was actually the fact that we had a Korean interpreter for the entire 5 days. We had to speak slowly, clearly and pause after a few sentences to let the interpreter do her thing. It certainly did make things interesting! I teamed up with Carlos, who is the Global lead of Enterprise Education at ConsenSys Academy and has amazing knowledge of blockchains and is a world class trainer. Day one […]
Read More ›