由于我一直在深入研究EOS dApp的開發(fā)安皱,我看了不少好文章艇炎。在這里,我匯總了下做一些研究后得到的所有知識缀踪。在本文中虹脯,我將解釋如何使用EOSJS和scatter奏候。我假設(shè)你對智能合約以及如何在EOS區(qū)塊鏈上部署它們有基本的了解,因?yàn)槲覍⒃诒疚闹刑^該部分鼻由。
我們在構(gòu)建什么厚棵?
我們正在構(gòu)建一個(gè)簡單的todo dApp蕉世。我們將為CRUD(創(chuàng)建婆硬,讀取,更新和刪除)操作編寫智能合約彬犯,并將使用EOSJS和scatter與已部署的合同進(jìn)行交互。CRUD操作包括創(chuàng)建湖蜕,完成,刪除和獲取待辦事項(xiàng)昭抒。我們將使用Jungle Testnet來部署我們的智能合約。
必備知識
- EOS
- EOSJS
- Scatter
Scatter設(shè)置
Scatter用于為區(qū)塊鏈簽署交易炼杖,并在不泄露密鑰的情況下向應(yīng)用程序提供個(gè)人信息。要設(shè)置Scatter錢包熙含,請關(guān)注這個(gè)視頻。在Scatter設(shè)置中怎静,必須在網(wǎng)絡(luò)中添加Jungle testnet黔衡,其中包含以下詳細(xì)信息:
Name: Jungle Testnet
Domain or IP: dev.cryptolions.io // It might be changed, so check for the latest one
Port: 38888
chainId:038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca
添加網(wǎng)絡(luò)配置后,現(xiàn)在通過輸入密鑰對部分然后單擊新建將你的私鑰導(dǎo)入錢包员帮。根據(jù)下圖所示的表格填寫關(guān)鍵信息。
現(xiàn)在捞高,您應(yīng)該使用密鑰對添加標(biāo)識渣锦。如果沒有用氢哮,請轉(zhuǎn)到“身份”部分并添加或編輯現(xiàn)有身份。在身份部分冗尤,選擇網(wǎng)絡(luò),然后選擇密鑰對裂七,它會(huì)要求您在鏈網(wǎng)上添加與該密鑰相關(guān)聯(lián)的帳戶。 您應(yīng)該添加具有活動(dòng)權(quán)限的帳戶腰吟。
你的scatter已全部設(shè)置好并可以在我們的dApp中使用。
智能合約
要部署todo智能合約毛雇,請按照本文將其部署到Jungle Testnet上。確保能夠從文章中提到的命令行與Testnet進(jìn)行交互侦镇。
與Testnet交互
我正在使用ReactJS作為前端部分。完整的邏輯和流程位于src文件夾中名為index.jsx的單個(gè)文件中壳繁。以下是配置對象:
// Config for scatter and eosjs
const EOS_CONFIG = {
contractName: “xyz”, // Contract name
contractSender: “xyz”, // User executing the contract (should be paired with private key)
network: {
protocol: “http”,
blockchain: “eos”,
host: “dev.cryptolions.io”,
port: 38888,
chainId: “038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca” // get this using http://dev.cryptolions.io:38888/v1/chain/get_info
},
eosOptions: {}
};
與scatter交互:
import EOS from ‘eosjs’;
document.addEventListener(`scatterLoaded`, this.onScatterLoad);
onScatterLoad = () => {
const scatter = window.scatter;
window.scatter = null;
// Here, we are connecting scatter with eosjs so that the transactions can be signed using keys present in scatter
this.eosClient = scatter.eos(
EOS_CONFIG.network,
EOS,
EOS_CONFIG.eosOptions,
EOS_CONFIG.network.protocol
);
// scatter object to collect the information present in wallet like accounts or public key
this.scatter = scatter;
// to load the data present in our table
this.loadTodos();
};
現(xiàn)在,在這個(gè)對象中氮趋,我們有兩個(gè)引用EOSClient和scatter,我們將分別用它們與EOS區(qū)塊鏈和錢包進(jìn)行交互剩胁。
我正在添加一個(gè)功能的代碼,以使用EOSClient獲取存儲(chǔ)的數(shù)據(jù)(所有todos)昵观,你可以在src/index.jsx
中檢查其余功能:
loadTodos() {
this.eosClient.getTableRows({
code: EOS_CONFIG.contractName,
scope: EOS_CONFIG.contractName,
table: “todos”,
json: true
}).then(data => {
this.setState({ todos: data.rows });
}).catch(e => {
console.error(e);
});
}
要獲取帳戶,請使用scatter對象的getIdentity()
:
const { accounts } = await scatter.getIdentity({
accounts: [config.EOS_CONFIG.network]
});
這樣就ok灼擂。
總結(jié)
其中一個(gè)最大的優(yōu)點(diǎn)是你無需在機(jī)器上維護(hù)錢包,scatter為我們管理一切觉至。還有其他方法來托管錢包,但scatter對最終用戶負(fù)責(zé),開發(fā)人員不需要處理任何私人信息峻贮。github庫
分享一個(gè)交互式的在線編程實(shí)戰(zhàn),EOS智能合約與DApp開發(fā)入門:
本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā)挂捻,內(nèi)容涵蓋EOS工具鏈船万、賬戶與錢包、發(fā)行代幣耿导、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點(diǎn)碎节,最后綜合運(yùn)用各知識點(diǎn)完成一個(gè)便簽DApp的開發(fā)。
這里是原文