Smart Contracts. Pierwsze starcie

Preview:

Citation preview

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

ADAM.POLAK@THESOFTWAREHOUSE.PL

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