Dapp-Development

在移動客戶端中使用松露合約抽象的最佳方式?

  • November 26, 2018

對於最後一年的電腦科學項目,我正在為我的 dapp 建構(或嘗試建構)一個移動前端。

客戶端將使用wallet提供的 byweb3.eth.accounts在本地簽署交易(密鑰庫文件也儲存在本地,並且永遠不會離開客戶端 - 加密或其他方式)。

我還利用truffle它來簡化智能合約的開發。

現在:考慮到交易是在沒有 Metamask 等幫助的情況下在本地簽名的 - 對於松露抽象,即它的抽象ABI,我應該從node.js後端提供這些嗎?我在概念上與潛在的流動作鬥爭。

如果我過度簡化或誤解了您的問題,請原諒。聽起來您只是在尋找一種在沒有元遮罩的情況下在移動設備上使用 web3 的方法。我將首先向您介紹這個關於dapps 如何在移動設備上執行的問題,儘管它有些過時,但它可以為您提供一些背景資訊。

這個問題顯示了啟用 web3-js 的移動瀏覽器的列表

在做一些研究時,我偶然發現了這個有用的

$$ Coinbase Wallet developer doc $$這顯示瞭如何使用 javascript 檢查支持移動和 web3 的瀏覽器,為了方便起見,我將粘貼下面的程式碼。

// Check for mobile
const { userAgent: ua } = navigator
const isIOS = ua.includes('iPhone') // “iPhone OS”
const isAndroid = ua.includes('Android')

// Check for web3 enabled browsers
const { currentProvider: cp } = window.web3
const isToshi = !!cp.isToshi
const isCipher = !!cp.isCipher
const isStatus = !!cp.isStatus
const isTrust = !! cp.isTrust
const isMetaMask = !!cp.isMetaMask

好的,現在我們知道我們是移動設備還是桌面設備,以及我們是否有支持 web3 的瀏覽器。接下來我們要開始呼叫合約方法。這個問題向我們展示瞭如何使用 web3 呼叫合約方法。再次,為了方便和清晰,我將在這裡粘貼一個通用版本。

/* First get the contract instance from the abi,
  which should be stored locally in your dApp.
*/
const contract = web3.eth.contract(contractAbi)
const contractInstance = contract.at(contractAddress)

contractInstance.myMethod.(param1 [, param2, ...] 
                          [, transactionObject]
                          [, defaultBlock]
                          [, callback]);

最後,您特別詢問了有關簽署交易的問題。我在上面喜歡的 Coinbase 文件有一個部分:

window.web3.currentProvider.sendAsync({
 jsonrpc: '2.0',
 id: 1,
 method: 'personal_sign',
 params: [
   '0x48656c6c6f20576f726c6421', // message
   '0x4c37E2533D4B1c9aAA5d1bc31dd7259A0852F0E4' // address
 ]
}, (err, res) => {
 console.log(err, res)
})

這取自第 26 頁。它還解釋personal_sign了其他簽名方法的使用。

注意:如果此答案是您正在尋找的答案,則重新編寫此問題的標題以更準確地反映所詢問的內容和回答的內容可能會很有用。

讓我知道這是否有幫助!🙂

引用自:https://ethereum.stackexchange.com/questions/63029