MENU

Neat EthOn Modelling Concept

June 16, 2019
0
947
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
1168
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 the 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
1171
0
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, here a clean install of npm resolved this issue for me. […]
Read More ›

Sublime and Solidity Syntax in 10 seconds

June 4, 2019
0
1283
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 ›

Blockchains in Papua New Guinea

June 1, 2019
0
1266
0
“Brave Tango 5-8-3, special ops on board, repeat special ops on board” the police officer said on the walkie talkie as I sat at the back of a van with metal grills over all the windows. “What have I gotten myself into?” I said to myself as a million thoughts ran through my head, mostly all Hollywood movie scenarios, as I was driven to meet the Bank of South Pacific board of directors at their head office in Port Moresby. I was invited to share with the directors what blockchain technology was about in a 2 hour interactive presentation session. It was a privilege to be able to share what I had learnt in the last 4 years of eating, sleeping and breathing blockchain technologies but it must have been intense for them. Lots of new words and terminology was introduced, acronyms used and demystified, and even technical concepts explained. I didn’t want to overwhelm the directors so only shared 1 technical concept and that was the idea of hashing. Instead of defining what it was with words, I actually showed them and encouraged them to boast their new found knowledge to their peers next time they go for drinks. […]
Read More ›

ConsenSys Academy at Ethereal New York

May 23, 2019
0
1644
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
2194
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 ›

All you need to know about 2^256

April 8, 2019
0
2351
0
How to pronounce 2^256? 2^256 is pronounced “two to the power of two hundred and fifty six”. What does it represent? Computers represent numbers in binary. Here is an example where we have 2 bits, where each bit can represent a ‘1’ or a ‘0’ allowing us to produce 4 possible combinations:00 = 001 = 110 = 211 = 3 The formula “2^number of bits” gives us the range of numbers that we can represent. So 2^2 = 4, which is true from the table above where we have 4 possible values. (In computers, we start counting from ‘0’) If we have 3 “bits” then we have 9 possible combinations (ie 2^3=9):000 = 0001 = 1010 = 2011 = 3100 = 4101 = 5110 = 6101 = 7111 = 8 If we have 256 ‘bits’, then we have 2^256 possible combinations which is a really large number! What does 2^256 look like in decimal? 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936 OR1.158 x 10^77 (this is 1.1 with 77 zeros after it). Source: https://defuse.ca/big-number-calculator.htm How do you pronounce 2^256? 115 quattuorvigintillion 792 trevigintillion 89 duovigintillion 237 unvigintillion 316 vigintillion 195 novemdecillion 423 octodecillion 570 septendecillion 985 sexdecillion 8 quindecillion 687 quattuordecillion 907 tredecillion 853 duodecillion 269 […]
Read More ›

Sydney Hashgraph Meetup

March 28, 2019
0
2497
0
It was great to finally attend the Sydney Hashgraph meetup and meet some of the organisers. We had Jason Loh and Edgar Seah dialled in to provide an update of Hashgraph and how mainnet is going to be launched very soon. This summer in fact. The audience was quite small but that is normal nowadays as the speculative hype has died down and only the true enthusiast remain. It is fascinating to also note that the Hashgraph consensus algorithm is asynchronous Byzantine Fault Tolerant, ie the gold standard of consensus algorithms. It has also been mathematically proven. The technology is still relatively new and there is still more to understand about it but it is exciting to see the progress.
Read More ›

Static and Symbolic Analysis

March 15, 2019
0
2772
0
Static Analysis Static analysis can be described as a way to test code without actually executing it. The idea here is to use a computer program to analyse a program’s source code without running it. Static analysis has a few sub components such as Flow Analysis. This tracks how values might flow between the different memory relocations in a program. Tainted Flow Analysis is often referred to where untrusted input is considered tainted, eg input from a user and conversely, hardcoded values or constants are untainted. Flow Analysis can have “sensitivity” added to increase the precision and also to reduce false positives. It basically accounts for variables whose contents change, typically by using extra qualifiers. Context Sensitivity Analysis is another sub component of Static Analysis where calling other functions can cause false positives. “So context sensitive analysis solves this problem by distinguishing call sites in some way, so that we don’t allow a call at one place to return it’s value to another call.” Symbolic Analysis Symbolic execution aims to generalise testing so that instead of testing with actual values, tests are run with variables. The image below explains it best. Concolic testing is another term often thrown in when discussing symbolic execution or symbolic analysis. […]
Read More ›

Fascinating POA & IBFT blockchain papers to read

March 9, 2019
0
3271
0
If you are trying to understand more about Proof of Authority consensus, Instanbul Byzantine Fault Tolerance (IBFT) or just blockchain consensus protocols in general, just jump straight into some research papers. It may seem daunting at first and it actually is but these papers are well written where sufficient background is provided to slowly build up a good understanding of other fundamentals. Here are key excerpts from the three papers I read. IBFT was developed by AMIS technologies in early 2017. [1] IBFT consensus protocol falls in the PoA category because only a set of special nodes, called validators, are authorised to propose new blocks. [1]. For more info on IBFT visit: https://github.com/ethereum/EIPs/issues/650 (this was inspired by EIP225 (link below)). The set of validators in PBFT is static whereas in IBFT they are dynamic [1] A private blockchain is a special permissioned blockchain operated by one entity. ie within one single trust domain. [3] Aura and Clique are two popular PoA algorithms. [2] Aura and Clique are two popular PoA implementations. [2] For more information on Clique, visit: https://github.com/ethereum/EIPs/issues/225 A blockchain is a linked data structure replicated over a peer-to-peer network, where transactions are issued to form new blocks. Peers […]
Read More ›

Training trainers at SK in Korea

February 25, 2019
0
4167
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
3942
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 ›

Some Merkle Tree resources

February 1, 2019
0
3708
0
Here is a great infographic from YunYun Chen from ConsenSys originally published at: https://media.consensys.net/ever-wonder-how-merkle-trees-work-c2f8b7100ed3 Here is a link to a 10 page research paper called “A digital signature based on conventional encryption function” by Ralph C. Merkle in 1988. https://people.eecs.berkeley.edu/~raluca/cs261-f15/readings/merkle.pdf This is a 7 page paper on “Providing Authentication and Integrity in Outsourced Databases using Merkle Hash Tree’s” https://people.eecs.berkeley.edu/~raluca/cs261-f15/readings/merkleodb.pdf
Read More ›

EVM Illustrated

January 24, 2019
0
4359
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
4909
1
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
5266
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 ›

IIB Council Certified Blockchain Professional

December 28, 2018
0
5253
0
I finally managed to pass my IIB Council Certified Blockchain Professional exam. I had been putting it off since August as I was flat out with up-skilling and delivering Enterprise Ethereum training. I had been in conversations with IIB Council earlier on in the year and got hold of the study materials in July 2018. The train the trainer process was very professional. I reviewed the initial draft 241 slide deck and then received the study guide. The study guide was protected with a license that was only valid for 30 days and disabled the copy and paste feature along with printing capabilities. Clever! Then came the proctored exam which was well executed as well. It had to be booked 3 days in advance and had to be taken in a room with a clear desk. A chrome extension had to be installed which unfortunately required access to my camera, mic and other functions as well. At the examination time, an examiner (a real person) would log on and control my computer to turn off screen capturing features and recorded my screen. I then had to use my webcam to show the examiner the walls of my room, my desk […]
Read More ›

Understanding basic functions in solidity

December 22, 2018
0
5656
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 more details The behaviours are defined as: View: Can read the state but will not modify storage state […]
Read More ›

What does semantic versioning have to do with Solidity

December 17, 2018
0
5403
0
Considering that the very first line of a solidity smart contract is something like: pragma solidity ^0.4.21 What does the caret really mean? The short answer is the caret or top hat (^) means the code will be compatible with compiler version from 0.4.21 to 0.5.0. This sounds easy to understand but it doesn’t actually tell the whole story. To really understand it, means learning about the concept of Semantic Versioning. In short, software versioning generally follows the format major.minor.revision. The caret is only one symbol out of various others such as ~ (tilde), * (wild card), || (logical or) and a bunch of typical ones such as >, >=, < and <=. The real definition of ^ is: “Allows changes that do not modify the left-most non-zero digit in the major.minor.version tuple format.“  This definition explains the following examples: ^1.2.3:  >=1.2.3 and <2.0.0 ^0.2.3: >=0.2.3 and <0.3.0 ^0.0.3: >=0.0.3 and <0.0.4 Tilde is interesting. The definition is: “Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.” which again is explained by these examples: ~1.2.3:  >=1.2.3 and <1.3.0 ~0.2.3: >=0.2.3 and <0.3.0 ~1.2:>=1.2.0 and <1.3.0 (Same as 1.2.x) ~1: >=1.0.0 <2.0.0 (Same as […]
Read More ›