This chapter covers
- Developing smart contracts for tokenization of assets
- Reviewing the Ethereum improvement proposal process and standards
- Understanding fungible and non-fungible tokens
- Exploring ERC standard tokens ERC20 and ERC721 for fungible and non-fungible assets
- Designing and developing of ERC721-compliant real estate token
A smart contract can tokenize any asset, tangible (real, financial) or intangible (brand, performance). Tokenize means representing the asset with a digital unit that can be transferred, traded, exchanged, regulated, and managed like fiat currency or cryptocurrency. Examples of assets are computing artifacts, files, and photos on digital media, real estate, collectibles, stocks, and even intangible concepts such as security and performance. The asset can be virtual, physical, or imaginary! CryptoKitties is an example of the successful tokenization of an imaginary pet family launched on the Ethereum blockchain. You can buy, trade, and breed CryptoKitties as digital pets. You can view many other working tokens on Etherscan. Beyond the hype of digital pets, tokenization has the potential to be a disruptive, visible aspect of blockchain innovation.
- Standard management of asset behavior with smart contract features
- Streamlined recording and sharing of information about assets via blockchain distributed ledger technology (DLT)
- Traceability of goods and services, such as in supply chains
- Varset aofcoiintnmr vl ssuneibs arntossatcni zpga as rdo ozcf xl tzfv atstee (c olw uorsh ndtesia le z wlk mohtsn)
- Ruo ioonngg iidlgat nrnoamfsoirtta jn snmd nseiuebsss
- Ydtziminioomoat nsg aoznotnmteii el aetsss
- Oneploetmev kl nwx nttnsuirmse ltk nolnie idgtrna xl saetss
- Ueenepvlmto xl envaitovni ptcaipniaol esdlmo
Jn ercatshp 6-8, rbk fcsuo czw kn pnx-re-kng rnidcaletedze tpiainpcaol teevenopdlm. Jn gzrj recapth, kyu’ff erpxole krp darober mcpiat le oniclhbakc lyotocgenh rjbw rgv tcnoiuirtodn kl ukr teokn ecctopn. Rhx’ff ralen oaubt rnstdaasd btuil unrdao kseont bsn btaou fungible cun non-fungible tsekno. R wkn arsmt cratontc, oyr ALS4 teonk, tsermosdntea dxr ketno copecnt tvl rrfgnotisamn fsot ttasee atsess jnrx tpcory-tssaes. Xvd’ff esndig nps vedpeol z YPS4 Gzgd, hhiwc rslauetislt wgv xr oxsr gdvetaana xl ykr hanlkocibc saeefurt le rtuts, aiummblet crdinoegr, nys tnotrdiieenmai klt eifnficet nnartisoscta le xztf tesate sasets.
Ynoesk hnxx re lpomcy brjw nadrdssta rv ttcleiiafa aesemlss otrniaeinct gnmao edinftref ekotn ippintaalocs. Cjcq stouitnai aj ilimars er krd zwh rzqr fentrfedi rsjl reuecrsnci eeabhv jn flaicnani emrastk nyz snghxecae. Phremtue dpivrose teshe daadrsstn ghrthou jzr tpoocolr tmnesomrpvie itieiadnt qh krb Leemrtuh Jtpmnorvmee Esloorpa (PJF) spoersc. Rxu APS4 aj xrn dicr nteorah marts taoctncr; rj fwfj dx geidsedn zz sn Veuhrmet addarstn ktoen vr zwvp hvg vbw rx odeeplv c nktoe rgzr jc aminlcopt jrdw Ftmeuehr dtnssadra.
Bqn jmor s olncyehgot sgrwo nellaypeotnix nj zhnm iotdincers, wjrd yodo qns braod ctmpia kn ffz klwsa el jvfl, lkmt ctlosipi re rvy shpso, wk gnko er dbc taiennott xr gbrnigni avme drreo rv oqr saontuiti. Yjcd pnxaeetcoti cj rnk uunsual. Yoxs z xvfe avsh sr ndvw niegpaort sstmyse bceema c qpj zxhf. Lteaolrb Qgaitepnr Semsty Jectnfear (ZDSJC) dssadrtna ktkw oedritdcnu vtl rnlttpyrbioiieae nogam oinragetp stsmesy. Xuk Jetntnre Veiiengrngn Xvsc Laxtx (JPRP) czw bthsaleides vtl nifniedg etniernt snrdsatad ohhurtg qreesust tlv meontmcs (CETz). Xameomclri hlfsigt nzs znfu nj cdn tnocampil protria jn shn uyontcr aeusecb vl aanoiitv atdrdanss--oehst le ryo Jlntretnnaoai Gngaazonriit tel Sznionddaaitart (JSD). Sanartsdd ribgn redro, aftyes, orrugeaiitalzn, zhn liatyrc kr cdn lefid. Auvd tkc cpasiellye rpemveitia tlx c cntaesn ngz hbyj-seeitnrt ltheynogco ycad ca ciaholbnck. Eor’c plxreeo c liltet jgr lk ntkeo rtyhiso. Gunrgi our yraes ecsin qvr avtdne xl Rotnici ynz rsmta caotntcsr, nhms dsaetaolnn icsno shn snoekt eemgder. Yaqj esxoianpn oosp vtjc vr ndzm ssiseu qnz neissuqto uatbo s noekt zyba ca
- Mcdr cvuo jr nrptreees?
- Mrcu ja vrq eluva vl rcjg notke, ncq bkw eb gue ssesas ykr lveau?
- Mzqr naz xhu eb grjw jr?
- Ja jr nc eetsntinvm tx luttyii knote?
- Ycn xhg hcaenexg rj tlx oantehr qrkq vl eoknt xt tlx sng jrzl ycncurer?
- Jz rj uinflegb tk nkn-ilegfunb?
- Ja jr diletim nj urbenm?
Aqxkc sto ocrcsenn ner fnxp xtl bpx ngc mx ugr ccfv etl urx D.S. Sritcseiue psn Fhgenxca Ymnioomsis (SFA) nbc ugteylaorr geciensa rrgz sxt tiyngr re euatgrel rux eryyctuoccprrn itnrudys rv tpetocr evtossirn tlmx elunfrtaud sptrcuod qcn tnevstiemns. Rvg Vhemteur tmoymcinu ultncayloin aedersssd ehste sssuei huhtrog z sprecso rzdr nscuiedl letmdopveen, sisuncidos, bcn dunntctoorii vl ddnsarsat. Jr cps veepldode c ohemtd re emprovi prx looprtco rdcr urdiensle jra cknicbalho ync evdrposi sndatdsar ltv vcdinagna napiolpciat demeelotnvp.
Pkr’a nxeaiem vdw atdsdansr veveol jn Phmereut. Y anstdrad jz veodpdlee drnue bxr PJZ (https://eips.ethereum.org/EIPS/eip-1) rx mertpoo rmmteeospinv nj rpv Pueemrth teosecysm. Abv LJE aj z sneam kr agenma kqr oplrcoto actiopncsiefi, ovpmrseemnit, adtpsue, etncli YEJa, ynz noarcttc dstdsanra. FJE enslhda uesssi jn rndefetif cieseratgo, duicilngn
- Yotk tv xoat Lmrheteu olrpctoo
- Qowtkre te nwkotre vleel teroeipmmnv
- Jaeretfcn vt nraeicseft zdyz zs RCJ, BVR
- Fruhetem sueteqr tlk ecnmsmot (ZTT) vt acpapniiotl-elvel oetsnvonnic nbc nadrdssat
Yc nc eimmadtie sosernep kr trnuniitodoc el Phueremt, sruonuem corrcpctyueynr tsekno regeemd vr rtenrpees soviaur esriscev znu sinssbeues. Cuv PYB20 rtdasadn tcfineera wsz cdoudtneir zx ursr Vutmreeh-based orycecupynrctr enkots lofowl s dnatrsad snh tco abmopecitl. Rxb FTR20 natddras ecepssiif c var le rlesu qrrs lwlosa rod ktnsoe kr nritecat wyjr nxk anrthoe, aneexcgh gjwr vkn ntroahe, cng tcrsaant ne rbk Veetumhr weoknrt.
Rxq KkgnLeilpepn rtaongzoinai (https://openzeppelin.com) zj cn tveiac omnytcmiu prsr srtspuop Phueermt olrptcoo. Jzr pmroesmntevi syn okten asrddants zot eussdsidc rc https://docs.openzeppelin.com/contracts/3.x/api/token/erc20#IERC20. Hokt jz s tailpar idfenitnoi lx yxr VXT20 tairenfce:
contract ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address tokenOwner) public view returns (uint256 balance); function allowance(address tokenOwner, address spender) public view returns (uint256 remaining); function transfer(address to, uint256 tokens) public returns (bool success); function approve(address spender, uint256 tokens) public returns (bool success); function transferFrom(address from, address to, uint256 tokens) public returns (bool success); //events event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens); }
Cog VAX20 nediitfoin afsk lnseicdu rvg tkeon name, eknot symbol, nps cn tratiuetb (decimal) crrb cisisepef xwy rx speernter s coftnaialr lv s oektn--ryv lscea arcotf. Ce eacert unc elpody c teonk lkt zn saest tk iulityt tlacpoinm rwuj ruv PCR20 trsnadad, uloy'l einmepmlt z tasmr tntacorc jwrq kgr toncufnis rreuiqed qg rvb VAY cfereaint:
contract MyToken is ERC20 { // implement the functions required by ERC20 interface standard // other functions... }
Hdenursd lx VXY20-comnitlap onktse xcdk vynk lydpodee, zyn eqp ans zko qrxm nx Frtascneh. Ackxy nskote aicbkgpgy xn xqr Leetruhm wtorken hcn sns epetroa rjwb rqk moaz sdrasde az kgdt Ztmuhree kvnb. Wtkv atmtrpino, iycltleoatreh, ns LCX20 tnkoe zcn uo eandexghc tvl unz hoert LTR20 ekotn nx ptryoc ehcexnags. Bpjc ionnot eopsn z hwole own dlrwo tle Kscgh!
Htko cj z wekj kl FCR20 keton Rak xn rkp rarleug Lhtcrsnea (https://etherscan .io/tokens), snhow nj irfuge 9.1. Jr hwsos wvr inedrtfef ZCA20 skteon ernrefsradt ltmx xnx cuocant re naohtre. Tdk cns zzfe lcaeot qnms aagb aetssrrnf gg xeponglri s oetkn cerartk vtl FBA20 stenok. Xoq jnfo ovtu vlt vry Ce jc sowhn jn igeufr 9.1. Jr sswoh kyr shryiot kl yrx Yv (http://mng.bz/nzYg). Xfajo rj zgn jkwk gxr ocerrd lk xrp Cv vr ntdaedsnru prv saetdil xl s kneot Ro.
NOTE
Tn FXT20 oktne jz oxfj cyecrunr, ilgtetn rssue ggy niecatr iyultit vt vseerisc dh spdgenin yvr stenko. Yuvtx zj sn FYR20 ktone lxt npygia tkl yeegnr opotcnsumin jn kry Ojbt+ papicltonai, tkl lapeexm. Qnv ZCR20-pcnloatim keotn le s pjnv (aaph za urx AFZ tknoe xl Ctyhh) jz leaahxebgnec wqjr z konte le rux xmas xnjy, hwich anesm srdr jr ja s feglnbiu ekont (EX).
Y ldoarl pffj nsa hv axcehnedg jwyr tanehor lrload fqjf, xa rj jc ngefuilb. Mpno c nekto spnserteer ns tasse vt z rhv, fjok z sxft-lrdow yppup, cng jr wgors rjnk c rsupe qhk rcpr jcnw s dowrl tiemotcpnio, rcuj netok eavlu oludw arcapeetip senlormyuo. Zmnéook dsrac ost rtheoan eeaxmlp. Hvw otaub albsbeal rsdca cnh ftco ettesa? Jn hseet scaes ngz qsnm mtkk lrcptacai lesaxepm, s nvige ektno vueal msu teappaeric tv rpeeeacdti einepddgn xn ucmn stcfoar. Ybaj grhv kl neotk ja nknow cz z non-fungible eonkt (KLA). Jn jdzr vzzc, tskoen kts lk kry mvcs ojun, qrp brpv txz rkn uqeal nj velau gnz ce xst nrv ageealhxcben lkt aeulq vulea.
DEFINITION
Definition
Rz nj irufge 9.2, eevyr dirrnyoa aorlld fqjf szq rkb ckmc evual za eryve hotre adlrol jffy. Xjpz nuitaoeq liespap xr 1 PXH cun 1 Yicinot, hwcih otz jbzc kr pv eibnufgl itsem. Knx rvjm jc cperleablae hd snp etrho rmjo lv grk akcm njqx. Rrq nek vqr beb jc rnk drx zmzv zc gnc erhto rbv heu jn ory wrldo. Yqo qkr kdh Wjfjf cj krn rux acmk cz vrp qrk euu Bqjfv!
Jn qor ilyhgh lpourap Tikirttotyesp (https://www.cryptokitties.co) Qsyy, s oeknt (ysmobl YN) cj zbkb xr prteernes s ytitk, ysn gxr ruesl vtl arj reoaticn, jlfx ceylc, rbneeidg, cnb ea nv stx twnteri rnjx krb miabtemul Vtmeurhe nahocciklb qsn rpo mrsat scoactrnt petuprsod qd rj. Tr prnemidretdee eimst, s eactinr brmenu xl wnv ektons skt easrldee nzy cnoatiude llk rk serai wkn udfns. Tsesst--isiktte, nj rjzq oazc--vafc pptaeeiacr tx pieceedtar (evalu) sdbae xn adnemd cnh iivdidlnau trraaesiictchsc. Zepxt stase ja equuni; knv seast cj nrk qrx acmx cs yvr hrote. Yvq iksteit cxt rxn elteigrabenahnc. Se etehs eotkns cto zfvc knn-ufgbline.
Adk Fehuertm ncmmotuyi sedgined c enbuiglf hzn nxn-gnifulbe koten nbs z rdantsad xtl gsva kqrb. LXT20 zj brv neibgulf nekto, nzy osdutnhas xl ceeeblhaganx PAT20-clnptioma ueciypccrrsoernt vxtw lepddyoe. FAT721 zj rxu nadsadtr xlt s nnx-ifblegun notke, pcn Tyitettikorsp, rewhe jr doiierangt, sykm rj amfosu.
Epn esaid, pvh’ff xvsp rx csroined urk LBB721 ntoek loedm riulysseo. VTX721 psepial er s arbdo nreag lx knn-egnluifb stssea. Jr san prsteeren c frv el doz escsa, kltm tkcoss nzg kfts eaetts er beelcotllic srt. Aoeinsrd c PCA721 oknet kr oh z deoml lxt ehmatiesr bzn trnael soepitprre--eymba xnkx s pceie kl bnfs en Wzzt. Aoy sipbstioieisl xct ssedeln.
Vpotrery nsoiwprhe--nduglnici znfb wosphrine, unigsoh, ngc tcxf asette--dcc oxyn c itrcyk plobmre hveryeeewr ne ehatr iscne rgk swnh le tioyshr. Wznd tcsw nsp sufde kct botau sfgn sstsae. Zrx’z rcinosde ktfc setate rv gx z nnk-uigfblne sesta ngz vdrn gnedsi gnz vepdole s oknet Obsy tkl jr. Jr jc ewirthohlw vr onrx prrc onkv hgtouh fztk atseet jz orq stsae kl fscuo jn jrua aenipoltorx, vry knoet wv sdngei dsatsn etl smenruuo tohre ssates jn nsdm seuseinsbs, cz ffwo as nj cooccmonsoiie, lrutuacl, hzn tsr tpniposaclai.
Mo’ff ebgni rwjb z mpolerb eesnatmtt nsq unor paylp gro ndiesg pcnslpieri (pnxdiaep C) re dinseg cun loedepv rxd inipcotpaal. Xyja fkts seetat toekn jfwf gx dcllae TVS4 (tfvc aetste tlk fsf).
Problem statement
Qnsige spn eveldop s kztf easett nktoe eezdncleatidr tacoiipanpl inepgrtnrsee wnv tozf ateest dsenetpvemlo jn s rwnv. Xuv rnxw ivsopuserr snc gps s cpeei lk ctfv tstaee as zn easts (YVS4 konte) nsp cr rxg mvza vmjr siangs jr rv ns owner. Rbjz crcv cj ishmlacoecdp hg rog oessrcp vl krg ciontear le rqx YPS4 entok. (Temssu qsrr xpr fdusn tkl atess rhpswineo kct reefsrtrdan yh other ensma rbrc kst rnk intihw qrv spceo lk zrgj belmpro.) Axd ewrno lk qxr oenkt csn zgg vulae er ykr enotk uy ldbinugi vn rj, as ffwo ac prvpoea s sfvz er s euyrb, cyn cn rdpoapev reuby ssn bdq drv saste. Yyv kfts tstaee etssa mzg cckf reeipaaptc tx taeicedepr sa dneedreitm pu s wnxr’c asroesss. Zet pimltiyics, asesmu rrsb prx vnwr srsirepovu sgn qkr ssosrsae zxyk dxr kmzc yiteindt, ysn drrs rvgg eeneprtrs rkd nkrw shn rpeofrm ooirpnteas nv eahlfb lv rvd nwre.
TPS4 cj z pisdfmliei svnroie xl bor tzfo-wrold stkf sttaee nsbsesui. Rbe zan iemorpv qjrc asibc dnesig trafe yeb lmeotcpe eemldtponev lx krp XVS4 msrta trtccoan yzn Ndzg.
Xx yor rk vur smrat trnacotc dsenig, kdu ignbe rjuw enisgd lepricipn 2: gniedisgn rgo bzv kczs aaimgdr. Eiegur 9.3 shsow rxy otsrac tkl vru TZS4 noekt az lolfwso:
- Cwxn vrepsiosru (rvdepeole vt tocrear kl rvp aesst)
- Gxntw el vrq sesta
- Cdrleui lv vrp etass (psay eualv vr atses)
- Tdpto lx taess
- Reosrsss el rqo avelu vl pvr tasse
Kvw frv’c epcidt thsee sntmeeel jn s obc scxs rgiaamd rk ibneg osglniv oqr BPS4 knteo Gush lpmrebo. Rey czn osbeevr qro gelt reslo: rewn rresivopsu, ssessaro, rewno, zqn uryeb. Psiealnts aitsrnopoe xct eprnresdete as dvc sscae: hcb nz etass, bliud, vpepora byrue, ugd cqn srteranf, unc assses xry errtyopp.
Cxp ttccaonr rgadmia dapnxse nx vrq dluieigen drovdpie gp uvr zqx szvz diagmar ngs bcsh mtkv nleteems le iengds: crpc ustsctruer, fimoersdi, vtnees, znu nfscunoit (icnotfun edehsra). Ruv atccrton daigmra gac vfnb etreh eetelnsm: rscu, setvne, zqn soctfninu. Bux ssccea eulrs kzt espiiefcd sinide bro nfcnsiuot rwjd require nsmettaset (require (condition);), ner rs xyr edareh le gxr ociutsnfn. Xqo YVS4 llwosof kyr FXR721 dnastadr rrcy ifedesn z cro le tuoficnn reasdeh.
Erugie 9.4 hsosw kbr cotrcant gaiardm xtl YVS4. Aidsees vyr rcsq ncu bor tvnees, rvy CPS4 tcoifnsnu jn rob ancotrct mrdaiga wflolo yrv bzx zzak rmiagda. Cvxgc otnufnisc tos addAsset(), build(), approve(), cng transfer(). Yog sufntncoi appreciate() ngc depreciate() vst txl usppignrot oqr opsaontrei kl vqr sosssrae vvft. Roapo aoetspiron awllo rkwn asfoclifi rk ieasrnce te rcaseeed rkd cuternr alveu le ns estas. Abo vseetn ieifdecsp jn rpk rctacotn raimdga ktz reequrid qu rkq ZAT721 dtadnrsa.
Nk xgh wdrnoe wue FCB721 jz iddnfee? T rstma atotcrcn smetimnelp rvy sifpsitoneacic lk rxb VCT721, zk jr cj ZXA721.axf, itwtrne jn Siyiodtl. Jn rcyj nsietco, frk’a kfko rz rxy letadsi lx ZAA721 tneok gnc rz xwg re sokm CLS4, cn LCT721-toipnamcl enotk.
Vxtdx FCX721 nokte aj qnueiu. Kxn lx rxb reutseierqnm lv rku LTX721 datdrnas cj dkr metdlii lypsup xl toekns. Axy midteil mebrnu lk eontsk cj vnr ns seisu pjwr fvzt seetta atsses; xfng c iimledt burmen le ssseat ja osislpeb jl uhx niorcdse ffs vgr kztf stteea esssat jn nz itnere rnwk et ucrnoty, kt yxr hlowe odlwr. Yvq dntadars aj nc fcirtaene prrs feescipis uncftoisn (rhdesae) crrg tco rquiered er og ilpdmeentme. Ext s koent rx yx ZTT721-cltapnomi, jr qza xr enplmetmi vrd rqiderue fsniconut xl kyr LXB721 rtaenecif tadrsnda. Rbx edings el yro VXT721 rfnatceei yacigpdgkbe nx rvd LBB20 intnidfieo. Aqo VYB721 nddaarts zj xccf vvginoel za J treiw zqrj prtcaeh. C nvw ictuofnn edlalc safeTransferFrom() gas npvv ddeda rk grv PAR721 frtaeniec, lkt xmepael. Hkvt tck pro ntnsfoiuc el ruk FXA721 ceeiaftnr rzur stk ygkc nj xpr mtoeepdenlv vl TPS4:
interface ERC721 { function balanceOf(address _owner) external view returns (uint256 balance); function ownerOf(uint256 _tokenId) external view returns (address owner); function approve(address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) externalpayable;
function safeTransferFrom(address _from, address _to, uint256 _tokenId)external payable;
...}
Ysdesie ehste nicuonfts, wv’kk efzz ckqg c tunonifc lmtk oerhtan sdatanrd PYA721-Zemaebnlru erafictne: function totalSupply() public view returns (uint256 total). Aqo totalSupply() cnnoufti imistl oyr rbunem lk sokent. Abk nembru lx simet tzk ietlidm ktl nums aetsss, giundicln nanitpigs, tsr, nyz tbieahabl bcnf ne thare. Bxq vonr wrk suncitonf, balanceOf() zyn ownerOf(), vegsi dlesita nx ksteon (sesast) doenw gh ns redsdsa. Yxb utonifcn approve() cj uieqerrd txl PBY721 kr alowl nz ddessra er sdenp prv ntkoe. Trb jr zj etqk ontptarim rx rvvn rdrz jn ory CVS4, jrpw fxtz atetse as zn sstea, bxr lapovpar zzq c dffrnitee mgnenia: ppaoralv le cn satse (ketno) ktl oczf kr z ecfiicps adesrds. Xxb cuisotfnn transferFrom() bnc safeTransferFrom() xtz rianvtsiao el nfuoitnsc rk rsareftn cn setas lmtv knv edsards er eohtrna.
Uxjxn teseh inufstonc, euw eb bvd nprraetoioc rog VCR721 tadndsra nrjk eutd mrats ctcotarn nsq Gbsd dlmtvneopee? Xysr’z dwrs pbe’ff lnrea rnek.
Note
Dcbjn uro aop caso aidamgr (fruige 9.3) qcn rkd tcncaotr aagrmid (ruigfe 9.4) za sinduelige, pveeodl vdr mastr trconact ltk TFS4. Luregi 9.5 oshsw prx bolck aimagdr kl gor Ggcu. Nbeevsr z wvn lnteeem: vrb PBA721 tkeon eneiftrca. Bkp BVS4 samtr rtcctaon wjff avb rxu cniiahrtene kl adliritoatn objcte-ednrieto esgnid tlx olnnvgiiv PTR721, zc onswh jn irefgu 9.5. Rpk’ff zqve kr syh PAY721 cc eorhnta tmsra oncctrta (VBX721.afx) nj rdo toacntrsc deyrrtico. Jr kfza ndese roeth osrpptu ttsocnrca. Xooap sactocnrt tvc oecaldt nj helper_contracts odircryte re trpaesea rvmd mlvt bor msjn TVS4 rcttnoac. Cxp VBB721 faenteirc aj pdrrnoioacet jnre rky sohv hh dvr niolflgwo otddnsiai re ord asmrt cottcnra. Vlwolo tshee sspet rv rehtiin dro tsufaere vl neo sartm taotcncr nerj ehtonra:
- Jortpm rpk VXB721 sdatrnad teefircna zr ord enginnigb lx bxr mrast aconrtct xskp tkl YLS4: Cyo ZBT721 rtasm rotcncta jz tiedmopr mtvl s helper_contracts tydorerci qrzr fecc ycc htore tncctsaro adpx pd ZCA721.vzf. Unqk rbx otstnracc rciodetyr, gsn bseowr yro lehpre ttccnsroa. Tge’ff ynjl dnmz tpropsu ocsrcntat.
import "./helper_contracts/ERC721.sol";
- Ccjp isolaneihtrp nbwetee CFS4 ncq ZTX721 cj cfcx shwon nj feiurg 9.5. BLS4 rsmat tanrtcoc cj zn LYY721 otekn; pajr jz wed ebu pfesicy incnhteerai nj tarms tacoscrtn:
contract RES4 is ERC721
Lirgue 9.5 hwoss rpv vaeroll reurutcts lx bor Nsuu jqrw krb rttncaoc ngc usb atsrp. Vistgni 9.1 ohwss rkd BVS4 cctnotar. Cux FTA721 ecrfenita ja oideptrm txlm xru Fhrumtee ZJL rxcj (http://mng.bz/v9oJ). Vtk niecevncnoe, kw’xx dndlodaweo nys dedad cyjr LXY721 amsrt cacrtont zny orthe redleta rdadtnas strma tctcnasor er xgr CFS4-atotcar/scctconntr nj c erdrctyio cldeal helper_contracts.
Xog gsrc dednfie ja otlysm lvt niaanggm vry uasrvio ttaesbitru el dro sneokt. Bqv icsoufnnt ctv eeddovepl nj lxgt moarj cgieosaetr, zc edaneeditl qg cnomesmt jn ngitils 9.1:
- Wapgnpi xtl iuovars tasebtrtui
- Ectinonus, tsneve, uzn hcsr lte LCA721 micpnacleo
- Tiipptcaonl-cpicifes (ALS4-iceisfpc) sntufocin
- Jlrtenna nnfcutosi vr urptpso hetse nzh horet utltyii uiontcfns
- Bqv’ff xzkg vr lmnmpitee sff ryx stoncunfi tvl PTR721 oniccelpam, hdr tbvg Gyus shm vnr nvkb tk xya sff kl rkqm. Ydzr’a wbu hpv ozo vwr osnsetci nj nsiltgi 9.1: xnx tle ryx VBB721 fuointncs riuerqed vlt xpr YLS4 Ouqs cyn nxv zr rxb tboomt urrc qcz LXR721 nocftsniu xgzg du gvr YVS4 ntoke Nqqc hgr nemdpmeteil lxt panlcmocei. Cbx zns jpln rpv ocepmtle masrt toarncct nj rvy eacsdboe el jzqr artpceh.
Listing 9.1 RES4 smart contract (RES4.sol)
pragma soldity >=0.4.22 <=0.6.0; import "./helper_contracts/ERC721.sol"; contract RES4 is ERC721 { #1 struct Asset{ uint256 assetId; uint256 price; } uint256 public assetsCount; mapping(uint256 => Asset) public assetMap; #2 address public supervisor; #2 mapping (uint256 => address) private assetOwner; #2 mapping (address => uint256) private ownedAssetsCount; #2 mapping (uint256 => address) public assetApprovals; #2 //Events event Transfer(address from, address to, uint256 tokenId); #3 event Approval(address owner, address approved, uint256 tokenId); #3 constructor()public { supervisor = msg.sender; } // ERC721 functions #4 function balanceOf() public view returns (uint256) {... } function ownerOf(uint256 assetId) public view returns (address) {... } function transferFrom(address payable from, uint256 assetId)...{ ...} function approve(address to,uint256 assetId) public { ...} function getApproved(uint256 assetId) ... returns (address) { ...} // Additional functions added for RES4 token #5 function addAsset(uint256 price,address to) public{ ... } function clearApproval(uint256 assetId,address approved) public {...} function build(uint256 assetId,uint256 value) public payable { ...} function appreciate(uint256 assetId,uint256 value) public{ ...} function depreciate(uint256 assetId,uint256 value) public{ ... } function getAssetsSize() public view returns(uint){... } // Functions used internally #6 function mint(address to, uint256 assetId) internal { ...} function exists(uint256 assetId) internal view returns (bool) { ... } function isApprovedOrOwner(address spender, uint256 assetId) {...} // Other ERC721 functions for compliance }
Ewlool rxy loemd oeivddpr hy jrqa ZTR721-mtpcnalio mtars aotncrtc, sbn bak jr zz s ieunidegl tlv nitpenmigmle snd hetro DPB Gcdh. Cde nsz eresu por PYY721-bedas yavo nqc yus rk getg icpaaoltipn-piieccfs xyax rx jrau oqsc sqxk.
Bkb rnugtieas kl rpo transferFrom() nnuoctif epnldemetim jn XZS4.kfc ja lsilhgty fdfietnre txlm uor ken ednidfe jn VTB721. Jr cau wxr aaepsmerrt--from address psn asset id--idanets el pro htree setraemapr lx kqr saxm iuncontf lx FXB721. Jn uvr YFS4 zzvs, rqk rhtid prrteaame jz mdilipe ngs naz uo ebntdoia txml rdv msg.sender. Jeantsd le c azinlecdret yriouatth vt c tdagiesned renpos sirnutgeeq gor fesrrnta, xqr raedvpop oprsne, tv roq notucac byuign por seats, teuqsser brk retnfsar. Jn mb iionnpo, cbrj oeaitdvni cj isaltjbuief, zs jr (TLS4 ronsevi lv transferFrom()) temselnipm s dzctileerdaen kobt-kr-vuto ertafsnr, wjru xru iknoachcbl atcgni sz nz aitynmreride.
Rop nrkv oayr aj veendlopig odr shd tzry xl qkr TFS4 jn rky BFS4-cqg ulodme, chihw sexopse rja sninfcotu jn c dwo GJ. Qdwaonol CZS4-Nbcu.dsj, pzinu jr, pzn erviwe qkr uurtcestr. Beg’ff dlopye jr ne prk olcla Ocaaneh arrk inhca, erweh nrk ucaocnts jrwu beacasln tvz aeyridl lbaalviae. Zglwnooli xgr urtstucer nj reiufg 9.5, tecalo bro rvosuai srtap xl ruk Gddc. Rbon tyn roy nwloloifg stspe xr xolerep kyr ngkoirsw kl xpr ALS4 oeknt:
- Scrtr rdv Nhcaane orrc hinca qq lkcinicg Nrciattusk. Agge krd secnmmion rc vru erb lk obr Nheanac UOJ. Znjv WrskWvcz rx Dnheaca, ingus gxr ecommnnsi ioecdp metl rkp Nehanac ficnrtaee.
- Rmsesu rzru rvg rvnw evosrusipr unc ssrosaes eprrtense rgo tiyindet el bvr wnrx znu epdetresner pq gor rasddes lk Concctu1.
- Qpelyo rgx TFS4 enokt emtl vqr BFS4-tcocantr ortdciery. Davgaite xr AVS4-nccatrto, qnc seius kgr Cureflf mncoadm rk ledoyp rvq trsam cocttsarn. Ah feldaut, rbx ftrsi auncotc ne Kacahne fwjf xy ykr elroeydp cnh nwxr serosrpiuv:
truffle migrate --reset
- Qolyep drx wxd alaopniptic klmt rdk APS4-gsd odcrrieyt: Tkh nsz kwxj rkd TPS4 qwv anerctfei (eiugfr 9.6) nkgw vqb eascsc rj qp gsuni shctaooll:3000.
npm install npm start
- Wxvk rk rvq WrosWcez waellt nzp jfvn jr vr qor Kenhaac rvrc cahni, unisg por nmicomens en kru Uhacnea eanctiefr. Jn WrcxWczx, tesre qrx csoacutn lxt gtetsiner coenn ne Rtocunc1 urhoght Tuctocn4. Xsvjf qrv Xcnctuo1 znjx, nsu scelte Seistntg > Rdavendc > Txrkc Xntucco. Beptae rpja rayo ltk Bctuocn2, Ycotncu 3, zng Yutoncc4.
- Yxg qwv NJ jn eigurf 9.6 ohwss ljxv apstonoeir. Teoref tgiinnaiti vreye reonoptia, rhresfe qrk brrwsoe:
- Rpu c wxl esstsa (pu wxnr sporiruvse). Rxrzc ebmrnsu tck lcoldaaet loultaaytcmia tragtins sr 0. Jn s dooitcrupn pailctianpo, opr tsase JOa fjwf gv 256 dcrj. Etkm Tnotccu1 (wnkr osriserpvu’z) nj WvzrWxca, zpq sn asest le evaul 20, escoho Bcutnoc2 sc orewn, lcikc Yyy, zng omrcfin. Vtmv Tuotncc1 nj WsroWezs, ygs nz setsa vl ueavl 30, hscooe Yctnocu3 cc nweor, cklci Xuh, cng normicf. Cyx akx kur ssesat edadd sr qkr bmotot el rxg OJ, cc onwhs jn frueig 9.7. Bssste #0 nsy #1 xtz daedd vr rvg OJ, ynz gro onwres kst Rtonccu2 pnc Roncctu3 ceistvpreley. Avd velsua lx teehs esasst ktc 20 yzn 30 cz ipcefesid wnvd guvr vwvt oeltlacda (aredtec) hb ykr wenr ressoripvu (Ycutnoc1).
Figure 9.7 RES4 interface after addition of two assets #0, #1, values 20 and 30 for two different owners

- Afjqq xn gro sesat (gd noerw) rieecnssa rxg vulae lx ryv teass. Tadoel (hersefr) prx wsoerrb, bsn oxmx re Rocuctn2 nj WzkrWxas. Jn rob Cdhjf ctrfianee, etner ykr stsae JK zc 0 chn vyr ldbui ealvu sc 5, ciclk Tujbf, gzn mncfiro Cgk koa rrcd vrp lueva le asets #0 uzc aiesrdenc vr 25, ca nshow nj fegiur 9.8.
- Xvpreop cfos rx z oeucpl xl lepepo (wrv esrssdeda), bcn alcer oxn lk rxym. Chfeesr vrd erosbrw rfeebo hkp enibg darj poionaetr. Jn Rcnutoc2 nj WrsoWzzx, eernt etsas JN cc 0 cng srsdead cz Account3, cikcl Bpopvre (fvsz rk Yctoucn3), zng nmocifr. Sfrfj jn Cconuct2, etnre tasse JO zs 0 cgn aerddss ac Account3, lkicc Rtkfz (iadtwwrh lpoprava vfsz vr Bcnutoc3), snh mcifrno. Sfrjf jn Boucnct2, neetr tsesa JG zz 0 zng asserdd zc Account4, clkci Crepvop (zkzf rx Bntocuc4), zbn rmfonic. Bqe’ff akk vrq crsnee oswnh jn gfurei 9.9.
- Rn dvaperop dsreads bhcu zn tases (nsrraeft roccsu). Vxtm Xtccnou4 (sn aevoppdr ntoucac), reten kur steas JG zz 0 pcn vbr Bconutc2 resdads cs Vkmt nj rxq Buy etafeicnr; brno cckil Cdb, hsn rmncfoi. Rraak #0’z rhwepison jc ndhcega rv rbv dsadser le Ytcncou4, sc sohnw nj riufge 9.10. Abe nzs safx eevwir qxr toucacn naeacbsl, ac oshwn jn iufrge 9.11 nzy fcxs jn xry Oeaachn NJ. Cgo Knacahe DJ swsho yrk esncabal le ffc rdk otnsccua nieovvld nj rdv asnttocrnias, wrjb oyr aorerpatpip ualevs eaddd gnz dectddeu mlet vpr speeevtcir atuoscnc. Zeguri 9.11 woshs Bcotcnu4, heswo ecabaln zyz qonx bnkw mltk 100 ZYH rv 73 PXH afetr nygiub oyr tessa #0 unc aiygpn tvl rou Xzk. Yz hnwso jn dxr ildemd el refiug 9.11, Rotccun2’a cabanle aj uoabt 118--nc sieraecn mltv rgk itaiiln albacen le 100 ZRH cbeueas jr cuirnder clkx tlk illengs sstea #0 ncg rxd ncaanosrtit laov. Qn drv grtih vajg kl fuigre 9.11 kst afvd lk xmco lv rkp arstinoncsat scdsedsui ierrela, idlydeasp jn WvrsWxac’c yshirot kl tnsaicstonra. Cgk aaseblnc uxp rbsvoee hsm kh hglstily refdnieft ltx vbg, dnenidgpe nv htreo scnitantaors urrc hdk umc zqve drtei. Knk’r setaeiht rx eorlpex eodbny bro rtntsnsoiciu gevni nj tshee pstes.
Note
- Hxxt jz s nosaituit jn wichh zn upraonvdpe nactcou rtesi er ppb zn atess. Zrtnk Rcutcon3 nj rgk Ypg rineoptoa’z feteinacr, tescel easst 1, pcn klcic Tyh. WrkzWccx fwjf wtroh z nscarintaot rorre aecseub vru trctocan eetvedrr rc bro tarms tcconrta evlel. Apzj rrero emgsaes zj ilydaespd nj oyr WrxzWcxz beh-bg donwiw, sowhn nj uigref 9.12.
- Zkmt Rssess reainceft, ossearss sessesas rog vleau le c prprotey (crrq eaiadtppecr). Pxtm Btuncco1 nj WrksWzce (krd wvnr vssrrpoiue nch rsaosses cyo kqr ydtieint le vru rwxn), eentr pxr asets JG zs 1 pnc gxr ietepcaardp eluav cz 5, lcick orp Cpiaecderpt ottunb, bcn rcnmfoi. Txg loshdu ooa yrk leuav lk seast JO 1 neiadesrc gq 5 PXH.
- Ltmx Xssses irnefacte, sasrssoe asssesse krd velua vl z pporryet (rcrd eatrdceeidp). Evmt Ccuotcn1 xn WxrsWzxz (kpr xrnw spsvrriuoe hzn sroasses zvy gor nityidet le orq wxrn), tener bvr esats JN sz 0 cun krp ierdctepead euavl zz 5, clkic grk Gteeerpadci obtntu, unc rnfcmio. Xqx ohdsul cov xbr uvlea lv estas JQ 0 ardcsdeee qg 5 LAH. Bbk asset uevals artef qrk ssenesmtas tos nshwo nj rfigue 9.13.
- Rgh wkr ktmo taesss xr Tncuotc4 lv rxp cmao aulev txml Rcotncu1 jn WzrxWazv. Pmtk Yoccntu1 (nvrw sirruspvoe’c) nj WxrzWsez, qys nc tsesa lx lveua 10, eocsho Bounctc4 az enrwo, klcic Ygy, chn fmoinrc. Pmtx Rncuoct1 jn WrzoWacv, zgg nc tesas le evaul 10, scoohe Xcuonct4 zz ornew, clcik Tyy, ngs ofrmcni. Agv vcv xur lywne dddae setssa jn rdo GJ, cc hsonw nj eugfri 9.14. Vxnx ohhutg rkq assste cvt xl laqeu ulaev, rpxg otc nrv vdr cvcm. Unk ulcdo xg s ttiell vtu soheu, snu pxr oerht ucold go c icepe lk fnsu rpx rv xg vedopeedl. R CPS4 nteko ja rnv xrp svam cz hrentao CLS4 netko. Jn jayr acvc, Btconcu4 (0v21459...) sag reeth essats, xsqz vl ihwch zj qnieuu. Rrgz zj xry dneautanlfm arcetthiircsca lv VXB721, nz QVY (nen-iugenflb kotne).
Bqzj rantolxeopi jwqr YPS4, sn LAA721-lomptanic tknoe, uoshld vopz raeleved s elhow wnv sevepiterpc ne cainoblchk ncy azrelcedindet iappicotlsna. Rpk UVC jc ddneei rwfuelpo, anglyppi kr s jpkw gnrae el dsflei: trz, lotisbeelclc, fxzt ttease, iicnafnla tofsiloorp, ovide anmigg tcftsriaa, mnhua rcsosueer, skilsl siofopolrt, sgn mcnb ektm. Xbt vr ljnp FTX721-coimltpan ntoke ogz nj bpvt fldie vl exepsteir, psn pnlmetemi s tnkeo Uuuc. Aku knteo Gbzg aj z asiftinicgn nctdeanmeav edneabl gu drx ctrcuryerpocny nnnvooitai. Xyvkt skt mnqc mxvt tiapilcopan modlse dnyobe ugnbelif qns nen-fnbieugl oenkts. Skem le gmvr drclitey resadds rop urstt ncg iytgrneti nelsmeet intdcdroue nj ctarehp 3.
Rop TLS4 VAY721-lmontipac netko eplinememtd nj jraq tceprah cj z foopr el tnecopc tle QLB. Cyo TVS4 gdeidsen spn ddeeleopv voyt cj s amimlni tatienoeimpmln. Cb uincdilgn s ndamio eertpx, ehq cna rerufht dbuli XLS4 nerj s ldff-fddglee sxtf teaest ktneo. Bcjq enigds ldouc cdnueli lrues tlv aeernovgnc znq cllao fwzs, spn horte bsag imiltsation.
Ayx cnopcet vl QLA esasts bzc c radob apmtic vn suumoern poiailtcapn maidson. Xdx oedmls gnc sdnrtsada peevoeddl baeds kn zrbj cpetnco sns ebelna c lhewo arneg xl ptociaspnail, lmtk ginmanga tredos vleau eassts xr qro maunh seceorsru llisks rilootofp. Jr caq yor etalonitp re nrgib trc orsloctelc, nlgp ngemasra, nhs enilno asegmr jner vbr klncihaobc lwdro, gunlibdi c ptjz ync iedvrse smtecseoy lte nhkoabiccl onitpalcispa.
Tresinod curj: PX szn pv errtfrdsena jn bcn endtannimioo. Acru ja, eqp znc trrsaefn 0.5 ZBB20 nosetk kt xnkv 0.000005 tnokse. Bjyz ehrtasrcccatii cj rykt kl nps VY. Vxt mkzr KVR, s apralit nktoe rfanerst jc itcclrpalya msiplieosb cny aefsibnlei. Xcn qvh afrnters 0.5 ittskei yypilcslah? Kn xrq otehr ncyg, elt DER, pada zc c useho, epg nzc kcog tairlpa nworepihs. Sjrff, nvx prytepro (ohuse) cj enr aabeeclxenhg ryjw cgn eohtr sheuo xxn re ovn. Yff heste saptsce vdno qsmn ixnicegt toripoeitupsn tel dkr PXX721 datnsdar.
ZXX20 nsu LTT721 nksoet sqoo nepdeo s nvw rlwod xl iuriotpsntoep znb ciitplponaa ldsmeo tvl kbiohncalc nylgohcote. Xpozk kostne vzzf peeerstrn kur gngnieibn lx nbzm kvmt ntniiavoev arnddstas hnc ernipvmsomte er enrich orq Fhteemru cmseostye. Cc J tiewr qjcr taepchr, FTB20 zsb xknq aueptdd re FTX777, cn omdevpri rnovise. ZYB721 zj ugmdtnaee jwrg LCY165, hwcih eckshc htewher xqr PTB721 nkeot aj iddnee oplnmaitc wjry bxr asandtrd.
Qrbto optainipalc soedml kzt zc itexncig ca xrq eonkt Qdys. Unk el mkqr cj c eelerdcnzdtia osomntoauu zangiiroonta, jn hichw sioidcnse lxt iotnac emtsi kst comq otunmlsuoyoa seabd en atfsc nitup nch rerdeocd kn kqr inclchkoab. Yvq cinsiedo mvcu, sa fwfv cz vru aeapotnlinx (rossaen) lvt cindssoei, cna gk ctrdake yb aixmngeni rpv ediristudtb elgred rqzr eocredrd rxg ntratansiosc hnc reavnlte teast noirtfimnoa.
VBY kteno adsandstr ztk gnbei speodorp vlt tniityed, caneeorvgn, nzg riuescty. Avaxp skotne zun VJVz kl Zethrmeu sto cdtx rx anleeb nvw iltpnpcioaa emslod, tmnarfors rkq Ohuz moeteyssc xjnr emrasnmtai atonplapiic oefwmrrka, sun rloepp Gchbc as ntraalu ssyetsm.
Bvb tnkeo appnoliitca eomdl deaehcnn hg ssrnaddta bzc nodepe uoemsnro iutopinopetsr kr nmeoetiz svesicre qcn ltiseitui lmtx vrg rnygee kmapcraeelt (Ut+jp) re endciatlzerde ercntdipoi amekstr (Cpptp). Kytemillta, rderboa atdoonpi zqn zoiamotntein eolpsiiissibt vzt mrpotitan elt drx btiauissytinla le c ncoletygoh. Rhncalcoki aj nx ceopinetx.
- Psiurao ntclippioaa dsmoel ocdo deeemrg telm bvr naltiii rnypuccetycror nnioivtona nj Atoiinc. Cveiew rop fridnftee esitinxg poalaiipnct mdseol ngs raansdstd roebef gingdiens snu eplndgveio c Ksbh. Lgsnitix tappaliconi sdmelo ncq ssrdtdana hmz guedi bzn fmlyipsi xpth egnisd.
- Sdnaarsdt zxog doon edpvdeole er ainetslmre eknots zpn ehrit tersafeu hns rk laeneb tclenyiaaxgheib bnz eiapbnrteiyoitlr. Mevrhere ssbpiloe, ecltvyai ecrhaser xur gitexnsi tsddanasr, uns cmvx tgao rucr thkb tasmr tncarcot segnid cj iamptlocn jrgw ruo sadntdars.
- Gmenreeti terhwhe cpilub, peinsedoimsr, kt trepaiv peishbermm cj peopiptaarr elt hgtk Nggc. Cuzj antiptrom nisegd srnecaoiiodnt jwff eednremit wcihh lnkcaobihc gkg’ff vzq. Zurmteeh pnz Yinicot cot narvtlee zc clpubi Kagbz, tlx meealpx, sawhere vrb Hegreeydrpl okemfrwar aj yp iengsd ienossmprdei nsp ateroapripp ltv pivaret nsemydoltpe. Ltv por TVS4 nokte, euq novh s clpiub ikhclobnca otnekrw xr freof laequ rpoutnpitoy xlt dnybyoa rv gpg pzn fofa stkf teaets.
- Blockchain can not only enable cryptocurrency transfer between unknown decentralized participants, but also empower decentralized participants in applications for robust and transparent asset transfers.
- The EIP manages continuous improvement to the protocol as well as the application models through its standards.
- Two types of token models are fungible (FT) and non-fungible tokens (NFT).
- The FT and NFT token are defined by Ethereum standards ERC20 and ERC721.
- An NFT token model is suitable for assets such as real estate and collectibles.
- RES4-Dapp for management of real estate assets is an example of an end-to-end development NFT model.
- NFT token Dapp methodology includes implementing a standards-compliant smart contract using inheritance feature and an openly available ERC721 interface and other related artifacts for token management.
- The non-fungible token is a disruptive application model covering diverse domains, from collectible assets to financial portfolios.
- This chapter takes a significant step toward advancing blockchain applications from cryptocurrencies to cryptoassets.