More and more blockchain platforms support the storage and use of data such as blockstack, sia or ocean protocol, and there is an emerging platform that also supports this, Arweave. If you do not know, the platform has raised $ 8M from storing corona information: details can be found here .
Too many platforms on the same mission will eventually go to a state of selection to find the most suitable platform. In this article, I will introduce Arweave for people to try to evaluate the prospects of this blockchain platform for storing data.
General introduction
Arweave focuses mainly on data storage, users will pay fees to create transactions to store their data for 100 years for miners (the amount is calculated according to the formula given by arweave is readable. in yellow paper ).
The main goal is to store data and applications, besides there are other use cases like Feedweave and Weavemail.
Architecture
First, the architecture of Arweave’s block chain will not be the same as regular blockchain chains (usually like a linked list chain) but rather a graph since the blocks are not only linked to the previous block, but also linked to a Any block in a chain called a recall block .
This chain is called Blockweave , where the block is linked to the block before it and a recall block (this block is determined based on the hash code and the height of the block in front). The purpose of adding this one is to enable a Proof of Access (PoA) consensus mechanism. The composition of Blockweave’s blocks is also quite correlated like other blockchains such as BTC, ETH, … also contain headers and bodies (however, a special point is that each Arweave trx supports up to 10MB of data)
Consensus mechanism (Consensus)
As mentioned above, the consensus mechanism of this network is Proof of Access – Proof of Access . The main purpose of this platform is to store data so that a consensus mechanism is generated so that it can be demonstrated that the miners are storing the data for the user.
First of all, PoA is an upgrade of PoW – that is, power is still needed for computation to solve the problem of creating a new block, but it will balance data storage.
Below is the formula to solve the problem of creating a new block
Before combining with nonce to solve math problem, Block data segment (BDS) is synthesized from 3 parts:
- TXs: This is a list of moderated transactions in the mining pool
- Previous Block: The latest block in Blockweave
- Recall Block: First we will have to find the correct recall block by relying on the hash and the height of the previous block will then determine the address of the recall block – That ensures that no miner can cheat. because block recall is unpredictable.
=> From the above data and combine with nonce to solve the same problem as PoW
From there, the improvements to PoA will temporarily solve the data storage problems thanks to the Recall Block :
- Ensuring that miners have to store user data because they want to create a new block, they must have access to the recall block to get the hash data.
- Minimize power costs because it will not spend too much hashrate because the difficulty will not be like PoW but will be based on the computation speed of the miners who own the recall block.
However, there will still be some weaknesses:
When miners re-enter into large pools, they will still refer to the old PoW problem because they all already have full nodes and will compete with each other based on computational speed, solo miners will be difficult to compete and can stop mining. => Then the user’s data access speed will decrease significantly because a large number of nodes have stopped storing but are concentrated in large pools (The problem of blockchain pow)
Permaweb
Prepare
Arweave not only supports data storage, but also supports applications with libraries to interact with data on the blockweave.
Sign up for a wallet
Just like the public blockchain, we will have a wallet to hold tokens, we can create a wallet through:
- Extension: Use the extension to create a wallet through the chrome extension
- Generate wallet via package (Recommended because the following will also be used to deploy the application):
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token operator">-</span> Install <span class="token keyword">package</span> <span class="token operator">:</span> npm install <span class="token operator">-</span> g arweave <span class="token operator">-</span> deploy npm update <span class="token operator">-</span> g arweave <span class="token operator">-</span> deploy <span class="token operator">-</span> Generate ví <span class="token operator">:</span> arweave key <span class="token operator">-</span> create <span class="token keyword">new</span> <span class="token operator">-</span> arweave <span class="token operator">-</span> key <span class="token punctuation">.</span> json <span class="token operator">-</span> Load ví được <span class="token keyword">export</span> từ extension <span class="token operator">:</span> arweave key <span class="token operator">-</span> save path <span class="token operator">/</span> to <span class="token operator">/</span> arweave <span class="token operator">-</span> key <span class="token punctuation">.</span> json |
Interacting with blockchain through ArweaveJs
In the article, I will guide you to build web-based applications, so through this library:
https://github.com/ArweaveTeam/arweave-js
And also requires a bit of Reactjs experience
To easily visualize the application we are going to build, you can see in front of its nose through:
In this application, we will create Trx to save the user’s score and get it to show the leaderboard
The full source code will be here: sudoku arweave – you can refer
Building the application
After cloning the code from github, you will focus on the index.js file because most of the operations are concentrated in this part.
Initialization
First to interact we will need an instance to be initialized from the Arweave package through the properties below
1 2 3 4 5 6 7 8 9 | <span class="token keyword">async</span> <span class="token function">componentDidMount</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> arweave <span class="token operator">=</span> Arweave <span class="token punctuation">.</span> <span class="token function">init</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> host <span class="token operator">:</span> <span class="token string">'arweave.net'</span> <span class="token punctuation">,</span> port <span class="token operator">:</span> <span class="token number">443</span> <span class="token punctuation">,</span> protocol <span class="token operator">:</span> <span class="token string">'https'</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> <span class="token function">setState</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> arweave <span class="token operator">:</span> arweave <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Create transaction
Login via key file: The difference compared to Ethereum dapps compared to Arweave is that the Arweave side does not log in through the extension that will import the key file, the below function will read the key file and get the jwk for later use to register. the Trx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token function-variable function">uploadKey</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">e</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">let</span> dataFile <span class="token operator">=</span> e <span class="token punctuation">.</span> target <span class="token punctuation">.</span> files <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> fileReader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> fileReader <span class="token punctuation">.</span> <span class="token function-variable function">onloadend</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">e</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">const</span> jwk <span class="token operator">=</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">parse</span> <span class="token punctuation">(</span> fileReader <span class="token punctuation">.</span> result <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> jwk <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> <span class="token function">setState</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> jwk <span class="token operator">:</span> jwk <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> arweave <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> arweave <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> arweave <span class="token punctuation">)</span> <span class="token punctuation">{</span> arweave <span class="token punctuation">.</span> wallets <span class="token punctuation">.</span> <span class="token function">jwkToAddress</span> <span class="token punctuation">(</span> jwk <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">address</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> <span class="token function">setState</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> address <span class="token operator">:</span> address <span class="token punctuation">,</span> loggedIn <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> dataFile <span class="token punctuation">)</span> <span class="token punctuation">{</span> fileReader <span class="token punctuation">.</span> <span class="token function">readAsText</span> <span class="token punctuation">(</span> dataFile <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> |
After uploading, you can directly create a transaction:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <span class="token function-variable function">submitScore</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">let</span> unixTime <span class="token operator">=</span> Math <span class="token punctuation">.</span> <span class="token function">round</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Date</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">getTime</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">1000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> tx <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> arweave <span class="token punctuation">.</span> <span class="token function">createTransaction</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> data <span class="token operator">:</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> timeCounter <span class="token punctuation">.</span> <span class="token function">toString</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">&</span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> name <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> jwk <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx <span class="token punctuation">.</span> <span class="token function">addTag</span> <span class="token punctuation">(</span> <span class="token string">'App'</span> <span class="token punctuation">,</span> <span class="token string">'arweave-sudoku'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx <span class="token punctuation">.</span> <span class="token function">addTag</span> <span class="token punctuation">(</span> <span class="token string">'Unix-Time'</span> <span class="token punctuation">,</span> unixTime <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx <span class="token punctuation">.</span> <span class="token function">addTag</span> <span class="token punctuation">(</span> <span class="token string">'Type'</span> <span class="token punctuation">,</span> <span class="token string">'score'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx <span class="token punctuation">.</span> <span class="token function">addTag</span> <span class="token punctuation">(</span> <span class="token string">'Rank'</span> <span class="token punctuation">,</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> initial <span class="token punctuation">.</span> <span class="token function">toString</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">await</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> arweave <span class="token punctuation">.</span> transactions <span class="token punctuation">.</span> <span class="token function">sign</span> <span class="token punctuation">(</span> tx <span class="token punctuation">,</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> jwk <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> <span class="token function">setState</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> start <span class="token operator">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">clearInterval</span> <span class="token punctuation">(</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> stopWatch <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> resp <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> arweave <span class="token punctuation">.</span> transactions <span class="token punctuation">.</span> <span class="token function">post</span> <span class="token punctuation">(</span> tx <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Tx submission response'</span> <span class="token punctuation">,</span> resp <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">alert</span> <span class="token punctuation">(</span> <span class="token string">'Submitting score'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> |
Creating a transaction will directly push data (data will be in the form of text, so if you want to save multiple types of data, it should be handled properly to make it easier to retrieve in the future).
The addTag fields are intended to query data later, so they need to be properly tagged
Query transaction
To query data from Blockweace we will have to use 1 Arweave language, ArQL: https://github.com/ArweaveTeam/arweave-js#get-transaction-data
The syntax will look quite similar to SQL like Or hay and, but still quite sketchy. Below is a simple query to get data back according to the tags we typed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token keyword">let</span> beginnerQuery <span class="token operator">=</span> <span class="token punctuation">{</span> op <span class="token operator">:</span> <span class="token string">'and'</span> <span class="token punctuation">,</span> expr1 <span class="token operator">:</span> <span class="token punctuation">{</span> op <span class="token operator">:</span> <span class="token string">'equals'</span> <span class="token punctuation">,</span> expr1 <span class="token operator">:</span> <span class="token string">'App'</span> <span class="token punctuation">,</span> expr2 <span class="token operator">:</span> <span class="token string">'arweave-sudoku'</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> expr2 <span class="token operator">:</span> <span class="token punctuation">{</span> op <span class="token operator">:</span> <span class="token string">'equals'</span> <span class="token punctuation">,</span> expr1 <span class="token operator">:</span> <span class="token string">'Rank'</span> <span class="token punctuation">,</span> expr2 <span class="token operator">:</span> <span class="token string">'50'</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> expr3 <span class="token operator">:</span> <span class="token punctuation">{</span> op <span class="token operator">:</span> <span class="token string">'equals'</span> <span class="token punctuation">,</span> expr1 <span class="token operator">:</span> <span class="token string">'Type'</span> <span class="token punctuation">,</span> expr2 <span class="token operator">:</span> <span class="token string">'score'</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> |
Call this query and sort the data (This requires decode data to be readable because this data will be encrypted) https://github.com/ArweaveTeam/arweave-js#decode-tags-from-transactions :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <span class="token function-variable function">fetchByQuery</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">query</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">let</span> arweave <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> state <span class="token punctuation">.</span> arweave <span class="token punctuation">;</span> <span class="token keyword">let</span> tx_rows <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> arweave <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> res <span class="token operator">=</span> <span class="token keyword">await</span> arweave <span class="token punctuation">.</span> <span class="token function">arql</span> <span class="token punctuation">(</span> query <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx_rows <span class="token operator">=</span> <span class="token keyword">await</span> Promise <span class="token punctuation">.</span> <span class="token function">all</span> <span class="token punctuation">(</span> res <span class="token punctuation">.</span> <span class="token function">map</span> <span class="token punctuation">(</span> <span class="token keyword">async</span> <span class="token punctuation">(</span> <span class="token parameter">id <span class="token punctuation">,</span> i</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">let</span> tx_row <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> tx <span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> tx <span class="token operator">=</span> <span class="token keyword">await</span> arweave <span class="token punctuation">.</span> transactions <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> id <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> e <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">let</span> tx_owner <span class="token operator">=</span> <span class="token keyword">await</span> arweave <span class="token punctuation">.</span> wallets <span class="token punctuation">.</span> <span class="token function">ownerToAddress</span> <span class="token punctuation">(</span> tx <span class="token punctuation">.</span> owner <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx_row <span class="token punctuation">[</span> <span class="token string">'unixTime'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">'0'</span> <span class="token punctuation">;</span> tx_row <span class="token punctuation">[</span> <span class="token string">'type'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> tx <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'tags'</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">forEach</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">tag</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">let</span> key <span class="token operator">=</span> tag <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'name'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> decode <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> string <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> value <span class="token operator">=</span> tag <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'value'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> decode <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> string <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> key <span class="token operator">===</span> <span class="token string">'Unix-Time'</span> <span class="token punctuation">)</span> tx_row <span class="token punctuation">[</span> <span class="token string">'unixTime'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">parseInt</span> <span class="token punctuation">(</span> value <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> key <span class="token operator">===</span> <span class="token string">'Type'</span> <span class="token punctuation">)</span> tx_row <span class="token punctuation">[</span> <span class="token string">'type'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> value <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> data <span class="token operator">=</span> tx <span class="token punctuation">.</span> <span class="token function">get</span> <span class="token punctuation">(</span> <span class="token string">'data'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> decode <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> string <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> data <span class="token punctuation">.</span> <span class="token function">split</span> <span class="token punctuation">(</span> <span class="token string">'&'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx_row <span class="token punctuation">[</span> <span class="token string">'id'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> id <span class="token punctuation">;</span> tx_row <span class="token punctuation">[</span> <span class="token string">'value'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">parseInt</span> <span class="token punctuation">(</span> data <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx_row <span class="token punctuation">[</span> <span class="token string">'player'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> tx_owner <span class="token punctuation">;</span> tx_row <span class="token punctuation">[</span> <span class="token string">'name'</span> <span class="token punctuation">]</span> <span class="token operator">=</span> data <span class="token punctuation">[</span> <span class="token number">1</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> tx_row <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> tx_rows <span class="token punctuation">.</span> <span class="token function">sort</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">a <span class="token punctuation">,</span> b</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">return</span> a <span class="token punctuation">.</span> value <span class="token operator">-</span> b <span class="token punctuation">.</span> value <span class="token operator">!==</span> <span class="token number">0</span> <span class="token operator">?</span> a <span class="token punctuation">.</span> value <span class="token operator">-</span> b <span class="token punctuation">.</span> value <span class="token operator">:</span> a <span class="token punctuation">.</span> unixTime <span class="token operator">-</span> b <span class="token punctuation">.</span> unixTime <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> tx_rows <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> |
Deploy the application
Finally, after the application is running properly locally, we can give it to permaweb by deploying:
https://github.com/ArweaveTeam/arweave-deploy
With reactjs app it will be very handy because we are supported build so we can use this command directly to upload app to permaweb:
1 2 | arweave deploy <span class="token operator">-</span> dir path <span class="token operator">-</span> <span class="token keyword">to</span> <span class="token operator">/</span> directory <span class="token operator">/</span> <span class="token keyword">to</span> <span class="token operator">-</span> deploy |
Remember that the arweave-deploy packages have been installed and the AR token is required in the wallet to create trx
Conclude
Above is an overview of the Arweave platform to store data and how to build applications on it, in the next articles I can guide how to become a miner on Arweave network.