smart contracts. pierwsze starcie
TRANSCRIPT
SMART CONTRACTS THE FIRST ENCOUNTER
SMART CONTRACTS - THE FIRST ENCOUNTER
AGENDA
▸ SMART CONTRACT - WHAT IS IT?
▸ SOLIDITY
▸ DEV ENVIRONMENT
▸ SIMPLE SMART CONTRACT
▸ TESTING
▸ PROBLEMS
▸ QUESTIONS
ADAM POLAK PHP DEVELOPER
JS DEVELOPER
E2E DEVELOPER
POLAK.ADAM1
LOOKING FOR AWESOME NODE.JS DEVS
SMART CONTRACT
SMART CONTRACT - WHAT IS IT?
IT’S A CONTRACTBUT IN BLOCKCHAIN
SMART CONTRACT - WHAT IS IT?
▸ NOT ONLY ABOUT TRANSFERS
▸ WRITTEN IN SOLIDITY
▸ CONTAINS BUSINESS LOGIC
▸ TRANSACTION BASED
ETHEREUM SMART-CONTRACTS
SMART CONTRACT - WHAT IS IT?
ETH SMART-CONTRACTaddResource(price, url)
accessUrl hasAccess
getAccess(price)
SOLIDITY
SOLIDITY
SMART-CONTRACTS IMPLEMENTING
LANGUAGE
SOLIDITY
pragma solidity ^0.4.4;
contract HelloUszanowanko { string private message;
function HelloUszanowanko() public { message = 'Hello TSH'; }
function getMessage() constant public returns(string) { return message; }
function setMessage(string newMessage) public { message = newMessage; } }
SOLIDITY
COMMANDS COST GAS
SOLIDITY
QUERIES ARE FREE
DEV ENVIRONMENT
DEV ENVIRONMENT
▸ SMART-CONTRACT COMPILATION
▸ DEPLOYMENT
▸ CONSOLE
▸ EASIER TESTING
ETHEREUM DEVELOPMENT FRAMEWORK
LOCAL BLOCKCHAIN
LOCAL BLOCKCHAIN
TRUFFLE-CLI
DEV ENVIRONMENT
FIRST CONTRACT
FIRST CONTRACT
truffle init
truffle create contract HelloUszanowanko
pragma solidity ^0.4.4;
contract HelloUszanowanko { function HelloUszanowanko() public { // constructor } }
npm i -g truffle
FIRST CONTRACT
pragma solidity ^0.4.4;
contract HelloUszanowanko { string private message;
function HelloUszanowanko() public { message = 'Hello TSH'; }
function getMessage() constant public returns(string) { return message; }
function setMessage(string newMessage) public { message = newMessage; } }
MIGRATION
FIRST CONTRACT
truffle create migration HelloUszanowanko
module.exports = function(deployer) { // Use deployer to state migration tasks. };
const HelloUszanowanko = artifacts.require('HelloUszanowanko');
module.exports = function(deployer) { deployer.deploy(HelloUszanowanko); };
truffle migrate
FIRST CONTRACT
OOPS! FAIL!
NETWORK CONFIG
FIRST CONTRACT
module.exports = { networks: { development: { host: "127.0.0.1", port: 7545, network_id: "5777" } } };
FIRST CONTRACT
FIRST CONTRACT
truffle console
FIRST CONTRACT
TESTING
TESTING
truffle create test HelloUszanowanko
contract('HelloUszanowanko', function(accounts) { it("should assert true", function(done) { var hello_uszanowanko = HelloUszanowanko.deployed(); assert.isTrue(true); done(); }); });
truffle test
TESTING
OOPS! FAIL! AGAIN!
TESTING
const HelloUszanowanko = artifacts.require(‘HelloUszanowanko’);
contract(‘HelloUszanowanko', function(accounts) { it("should assert true", function(done) { var hello_uszanowanko = HelloUszanowanko.deployed(); assert.isTrue(true); done(); }); });
truffle test
TESTING
TESTING
const HelloUszanowanko = artifacts.require('HelloUszanowanko');
contract('HelloUszanowanko', function(accounts) { it('has default message', async function() { const contract = await HelloUszanowanko.deployed(); const message = await contract.getMessage(); assert.equal(message, 'Hello TSH', 'Hello TSH is message'); });
it('changes message', async function() { const contract = await HelloUszanowanko.deployed(); await contract.setMessage('Hello Uszanowanko'); const message = await contract.getMessage(); assert.equal(message, 'Hello Uszanowanko', 'Hello Uszanowanko is message'); }); });
truffle test
TESTING
DECENTRALIZED APPS
SOON
PROBLEMS
PROBLEMS
▸ IMMATURE TOOLS
▸ STEEP LEARNING CURVE
▸ DECENTRALIZED APPS ARE SLOW
▸ EASY TO LOSE MONEY
QUESTIONS ?
SMART CONTRACTS - THE FIRST ENCOUNTER
THANK YOU