package Ġjp . co . sor am its u . core _ db . migrations Ċ Ċ import Ġandroidx . room . migration . Migration Ċ import Ġandroidx . sqlite . db . Support SQLite Database Ċ import Ġjp . co . sor am its u . common . utils . as Boolean Ċ import Ġjp . co . sor am its u . core _ db . model . Node Local Ċ import Ġjp . co . sor am its u . core _ db . pre populate . nodes . default Nodes Insert Query Ċ Ċ class ĠUpdate Default Nodes List ( ĊĠĠĠ Ġprivate Ġval Ġnodes List : ĠList < Node Local >, ĊĠĠĠ Ġfrom Version : ĠInt , Ċ ) Ġ: ĠMigration ( from Version , Ġfrom Version Ġ+ Ġ 1 ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( nodes List . all Ġ{ Ġit . isActive . not () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nodes Ġshould Ġnot Ġbe Ġactive Ġby Ġdefault " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe pl acing Ġdefault Ġset Ġof Ġnodes , Ġtaking Ġcare Ġof Ġactive Ġnode : ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIf Ġactive Ġnode Ġis Ġdefault Ġone , Ġthen Ġit Ġwill Ġbe Ġchanged Ġto Ġfirst Ġdefault Ġnode Ġfrom Ġnew Ġset Ġwith Ġthe Ġsame Ġnetwork Ġtype ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIf Ġactive Ġnode Ġis Ġnot Ġdefault , Ġit Ġwill Ġremain Ġactive , Ġsince Ġit Ġ 1 0 0 % Ġw ont Ġbe Ġdeleted ĊĠĠĠĠ Ġ* ĠĠĠĠĠ ĠIf Ġthere Ġare Ġno Ġactive Ġnode Ġ( clean Ġstart ), Ġnothing Ġwill Ġhappen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . beginTransaction () ĊĊĠĠĠĠĠĠĠ Ġval Ġactive Node Link Cursor Ġ= Ġdatabase . query (" SELECT Ġnetwork Type , Ġis Default ĠFROM Ġnodes ĠWHERE ĠisActive Ġ= Ġ 1 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġ( active Node Network Type , ĠisActive Node Default ) Ġ= Ġif Ġ( active Node Link Cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Type Ġ= Ġactive Node Link Cursor . getInt ( active Node Link Cursor . getColumnIndex (" network Type ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Default Int Ġ= Ġactive Node Link Cursor . getInt ( active Node Link Cursor . getColumnIndex (" is Default ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Type Ġto Ġis Default Int . as Boolean () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull Ġto Ġnull ĊĊĠĠĠĠĠĠĠ Ġactive Node Link Cursor . close () ĊĊĠĠĠĠĠĠĠ Ġval Ġmodified Nodes List Ġ= Ġif Ġ( active Node Network Type Ġ!= Ġnull Ġ&& ĠisActive Node Default Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Nodes List Ġ= Ġnodes List . to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Re levant Default Node Ġ= Ġnodes List . first Ġ{ Ġit . network Type Ġ== Ġactive Node Network Type Ġ&& Ġit . is Default Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠindexOf Re levant Node Ġ= Ġnodes List . indexOf ( first Re levant Default Node ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Nodes List [ indexOf Re levant Node ] Ġ= Ġfirst Re levant Default Node . copy ( isActive Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Nodes List ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes List ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DELETE ĠFROM Ġnodes ĠWHERE Ġis Default Ġ= Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( default Nodes Insert Query ( modified Nodes List )) ĊĊĠĠĠĠĠĠĠ Ġdatabase . set Transaction Successful () ĊĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Operations Tables To Db _ 2 3 _ 2 4 Ġ= Ġobject Ġ: ĠMigration ( 2 3 , Ġ 2 4 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDROP ĠTABLE ĠIF ĠEXISTS Ġ` transactions ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` operations ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` id ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` address ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` time ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` token Type ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` status ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` source ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` operation Type ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` module ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` call ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` amount ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` sender ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` receiver ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` hash ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fee ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is Reward ` ĠINTEGER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` era ` ĠINTEGER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` validator ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` id `, Ġ` address `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠRemove St aking Rewards Table _ 2 2 _ 2 3 Ġ= Ġobject Ġ: ĠMigration ( 2 2 , Ġ 2 3 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠTABLE ĠIF ĠEXISTS Ġ` staking _ rewards ` ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġtotal Reward Ġnullable Ġ-> Ġnot Ġnull ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠTABLE ĠIF ĠEXISTS Ġ` total _ reward ` ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` total _ reward ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` account Address ` ĠTEXT ĠNOT ĠNULL , ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` total Reward ` ĠTEXT Ġ ĠNOT ĠNULL , ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` account Address ` )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Total Rewards Table To Db _ 2 1 _ 2 2 Ġ= Ġobject Ġ: ĠMigration ( 2 1 , Ġ 2 2 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` total _ reward ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` account Address ` ĠTEXT ĠNOT ĠNULL , ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` total Reward ` ĠTEXT , ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` account Address ` )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" ClassName ") Ċ class ĠMove Active Node Tracking To Db _ 1 8 _ 1 9 ( private Ġval Ġmigr ator : ĠP refs To Db Active Node Migr ator ) Ġ: ĠMigration ( 1 8 , Ġ 1 9 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . beginTransaction () ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE Ġnodes ĠADD ĠCOLUMN Ġ` isActive ` ĠINTEGER ĠNOT ĠNULL ĠDEFAULT Ġ 0 ") ĊĊĠĠĠĠĠĠĠ Ġmigr ator . migrate ( database ) ĊĊĠĠĠĠĠĠĠ Ġdatabase . set Transaction Successful () ĊĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠRemove Account ForeignKey From Asset _ 1 7 _ 1 8 Ġ= Ġobject Ġ: ĠMigration ( 1 7 , Ġ 1 8 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . beginTransaction () ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠINDEX ĠIF ĠEXISTS Ġindex _ assets _ account Address ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE Ġassets ĠR ENAME ĠTO Ġ_ assets ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` assets ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` token ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` account Address ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` free In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` reserved In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` misc Frozen In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fee Frozen In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` bon ded In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` re deem able In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` un bon ding In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` token `, Ġ` account Address `), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN ĠKEY (` token `) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREFERENCES Ġ` tokens ` (` type `) ĠON ĠUPDATE ĠNO ĠACTION ĠON ĠDELETE ĠNO ĠACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" CREATE ĠINDEX Ġ` index _ assets _ account Address ` ĠON Ġ` assets ` Ġ(` account Address `) ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" INSERT ĠINTO Ġassets ĠSELECT Ġ* ĠFROM Ġ_ assets ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠTABLE Ġ_ assets ") ĊĊĠĠĠĠĠĠĠ Ġdatabase . set Transaction Successful () ĊĠĠĠĠĠĠĠ Ġdatabase . end Transaction () ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠChange PrimaryKey For Rewards _ 1 6 _ 1 7 Ġ= Ġobject Ġ: ĠMigration ( 1 6 , Ġ 1 7 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠTABLE Ġst aking _ rewards ") ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` staking _ rewards ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` account Address ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` eventId ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` block Number ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` extr insic Index ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` extr insic Hash ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` module Id ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` params ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` event Idx ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` event Index ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` amount In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` block Timestamp ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` slash K ton ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` account Address `, Ġ` block Number `, Ġ` event Idx ` )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠINDEX ĠIF ĠNOT ĠEXISTS Ġ` index _ staking _ rewards _ account Address ` ĠON Ġ` staking _ rewards ` Ġ(` account Address `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd St aking Rewards Table _ 1 5 _ 1 6 Ġ= Ġobject Ġ: ĠMigration ( 1 5 , Ġ 1 6 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` staking _ rewards ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` account Address ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` eventId ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` block Number ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` extr insic Index ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` extr insic Hash ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` module Id ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` params ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` event Index ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` amount In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` block Timestamp ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` slash K ton ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` account Address `, Ġ` block Number `, Ġ` extr insic Index `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠINDEX ĠIF ĠNOT ĠEXISTS Ġ` index _ staking _ rewards _ account Address ` ĠON Ġ` staking _ rewards ` Ġ(` account Address `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Account St aking Table _ 1 4 _ 1 5 Ġ= Ġobject Ġ: ĠMigration ( 1 4 , Ġ 1 5 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ` account _ staking _ ac cesses ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` address ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` stash Id ` ĠBLOB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` controller Id ` ĠBLOB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` address `), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN ĠKEY (` address `) ĠREFERENCES Ġ` users ` (` address `) ĠON ĠUPDATE ĠNO ĠACTION ĠON ĠDELETE ĠCASCADE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Network Type To Storage Cache _ 1 3 _ 1 4 Ġ= Ġobject Ġ: ĠMigration ( 1 3 , Ġ 1 4 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠTABLE Ġstorage ") ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ` storage ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` storage Key ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` network Type ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` content ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` runtime Version ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` storage Key `, Ġ` network Type `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Storage Cache Table _ 1 2 _ 1 3 Ġ= Ġobject Ġ: ĠMigration ( 1 2 , Ġ 1 3 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ` storage ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` storage Key ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` content ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` runtime Version ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` storage Key `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Runtime Cache Table _ 1 1 _ 1 2 Ġ= Ġobject Ġ: ĠMigration ( 1 1 , Ġ 1 2 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ` runtime Cache ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` network Name ` ĠTEXT ĠNOT ĠNULL ĠPRIMARY ĠKEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` latest Known Version ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` latest Applied Version ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` types Version ` ĠINTEGER ĠNOT ĠNULL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Ph ishing Addresses Table _ 1 0 _ 1 1 Ġ= Ġobject Ġ: ĠMigration ( 1 0 , Ġ 1 1 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ` ph ishing _ addresses ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` publicKey ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` publicKey `) Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠAdd Token Table _ 9 _ 1 0 Ġ= Ġobject Ġ: ĠMigration ( 9 , Ġ 1 0 ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ` tokens ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` type ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` d ollar Rate ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` recent Rate Change ` ĠTEXT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` type `) Ġ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DROP ĠTABLE Ġassets ") ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE Ġ` assets ` Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` token ` ĠINTEGER ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` account Address ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` free In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` reserved In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` misc Frozen In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` fee Frozen In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` bon ded In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` re deem able In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` un bon ding In Pl anks ` ĠTEXT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY ĠKEY (` token `, Ġ` account Address `), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN ĠKEY (` account Address `) ĠREFERENCES Ġ` users ` (` address `) ĠON ĠUPDATE ĠNO ĠACTION ĠON ĠDELETE ĠCASCADE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN ĠKEY (` token `) ĠREFERENCES Ġ` tokens ` (` type `) ĠON ĠUPDATE ĠNO ĠACTION ĠON ĠDELETE ĠNO ĠACTION Ġ); """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" CREATE ĠINDEX Ġindex _ assets _ account Address ĠON Ġassets ( account Address ); ") ĊĠĠĠ Ġ} Ċ } Ċ