巨爆乳肉感一区二区三区视频动漫-67194线路一直接进入骚逼-亚洲精品无码一区二区三区四虎-亚洲国产精品有码-国产精品99无码一区二区视频-免费观看A黄色

Outlier Ventures:如何用Arweave去中心化托管網(wǎng)站前端

訪客 2年前 (2023-12-15) 閱讀數(shù) 406 #區(qū)塊鏈
文章標(biāo)簽 快訊

作者:Lorenzo Sicilia,Outlier Ventures;翻譯:0xxz@喜來順財經(jīng)

盡管 Web3 涉及無需許可和可驗證性,但仍有太多項目擁有使用 AWS、GCP、Vercel、Netlify 等托管式的完全中心化前端。

這些平臺因其出色的開發(fā)者體驗和合理的成本而成為最受開發(fā)者歡迎的工具。部署完全去中心化的應(yīng)用程序并不簡單,工具也不成熟。?

在本文中,我們描述了如何輕松部署和托管完全去中心化的前端——只需一次性支付 0.003 美元即可購買約 1MB 的資產(chǎn)。

在 Outlier Ventures 產(chǎn)品和工程團(tuán)隊中,我們花了很多時間討論和思考有助于塑造我們?nèi)ブ行幕磥淼男录夹g(shù)。你可以查看我們的 Web3 技術(shù)雷達(dá)。?

除了花時間幫助我們的投資組合公司做出正確的技術(shù)選擇之外,我們還自己構(gòu)建應(yīng)用程序 - 例如,Scott Canning 最近在 NEAR 上構(gòu)建的去中心化融資平臺項目。

我們決定在 Web3 堆棧上構(gòu)建更多內(nèi)容,并在此過程中撰寫許多不同的設(shè)計選擇,并在一系列博客文章中記錄我們的發(fā)現(xiàn)。??在本文中,我們將關(guān)注 DePIN,特別是去中心化存儲的主題。

各種 DePIN(去中心化物理基礎(chǔ)設(shè)施網(wǎng)絡(luò))允許開發(fā)人員利用像AWS、谷歌云、Azure 等提供的同類服務(wù),但以真正去中心化的方式。擁有閑置計算能力的參與者會被激勵將其資源貢獻(xiàn)給一個有效的云計算平臺,該平臺沒有中介機(jī)構(gòu),也沒有總體的中心控制點或故障。

這篇文章解釋了:

DePIN和去中心化存儲的挑戰(zhàn)

我們?nèi)绾谓鉀Q托管挑戰(zhàn)

我們做出的技術(shù)選擇

Arweave 基礎(chǔ)知識

arweave-bundle 簡介,這是一個直接從 CI/CD 部署去中心化前端的庫。

去中心化存儲的挑戰(zhàn)

如果前端中心化托管,那么 DApp 就不是真正去中心化的。如果網(wǎng)站前端不能登錄或包含漏洞或更糟糕如第三方破壞網(wǎng)站,用戶對它們?nèi)狈π判模敲磽碛袩o需許可合約有什么好處?

當(dāng)后端和前端都完全透明時,人們經(jīng)常重復(fù)的 “Don’t trust, verify”才會變得更有意義。

決定托管解決方案

評估在何處托管 dApp 時需要牢記的一些驗收標(biāo)準(zhǔn):

1、確保不可篡改性和可訪問性:允許跟蹤公共基礎(chǔ)設(shè)施上已部署文件的版本控制,dApp 應(yīng)該是“不可停止的(unstoppable)”。

2、易于部署:易于發(fā)布新內(nèi)容并能夠與 CI/CD 集成。

3、成本:盡可能便宜

4、加密支付:一種我們可以使用代幣支付而不必被迫退回到法幣通道的服務(wù)

定義了這些要求后,我們確定了一些可用的選項:?

IPFS(使用我們托管的節(jié)點)

IPFS(使用第三方提供商)

Filecoin

Storj

Arweave

出于我們 dApp 的目的,我們決定盡量減少對 Pi?ata、Web3.storage 或 Infura 等任何第三方解決方案的依賴。雖然它們在易于部署等方面帶來了許多優(yōu)勢,但它們需要 API 密鑰,我們將其視為單點故障和控制風(fēng)險。只要有 API 密鑰,就無法保證不可篡改性和可達(dá)性。?

不可避免地存在權(quán)衡。在 Outlier,我們經(jīng)常采用 IPFS 來托管靜態(tài)內(nèi)容。我們甚至討論了托管我們自己的 IPFS 節(jié)點。這將為最終用戶提供驗證特定部署是否與已部署的代碼包的 CID 相匹配的機(jī)會,并且我們可以利用 IPNS 和 IPFS 以及 ENS 來允許可變的 IPFS CID 指針更新網(wǎng)站內(nèi)容并通過 HTTPS 啟用域名解析時。

然而,由于 IPFS 本身不是一個激勵網(wǎng)絡(luò),因此將 dApp 固定到我們自己的節(jié)點可能會造成單點故障,這是我們嚴(yán)格試圖避免的。

我們研究了 IPFS 固定解決方案,例如https://web3.storage/,它提供了出色的開發(fā)人員體驗,但最終它是一個中心化解決方案,因為它基于他們持有的密鑰,并且允許他們隨時撤銷服務(wù)時間。這是一項有用的服務(wù),但在這種情況下,我們決定它不會為我們提供我們所追求的完全去中心化的體驗。

出于同樣的原因,另一個解決方案https://filebase.com/被排除。

接下來,我們考慮了 Filecoin,它在 IPFS 之上提供了一個層,并激勵提供商通過將內(nèi)容固定到 IPFS 節(jié)點來提供存儲空間。以 Filecoin 向提供商支付費用,并且由于 IPFS 和 Filecoin 都是由 Protocol Labs 開發(fā)的,因此這是一種流暢且連貫的體驗。??如果不是他們的商業(yè)模式取決于交易,我們可能會選擇 Filecoin 。作為開發(fā)人員,我們不需要持續(xù)考慮向誰付款以及支付多少錢,因此對于我們的特定用例,我們也排除了 Filecoin。

我們的第三個選擇 Arweave 為我們提供了技術(shù)權(quán)衡,但最終是我們選擇的解決方案。雖然每次上傳的成本很低——每次大約 0.003 美元,而且該網(wǎng)絡(luò)已經(jīng)存在五年了,但工具和資源比 Filecoin 和 IPFS 生態(tài)系統(tǒng)中的要少,因此我們必須解決一些有趣的挑戰(zhàn)——包括開發(fā)我們的自己的庫,用于直接從我們的 CI/CD 捆綁和上傳。??

Bzq5Vqn40dTHNi0Bavl7T1e8wyVY8a08xg1Tq1dM.png

Arweave 工具

你可以在這里按照我們的步驟熟悉如何將內(nèi)容上傳到 Arweave(又名 Permaweb)。??

首先,我們熟悉了基礎(chǔ)知識。在我們決定構(gòu)建一個簡單的 React 應(yīng)用程序后,我們的第一站是https://cookbook.arweave.dev/,在那里我們找到了大量用于將數(shù)據(jù)上傳到 Arweave 的有用資源,包括部署應(yīng)用程序。

先決條件?

你需要安裝 Node,以及 npx 和 pnpm。你還需要一個交易所帳戶,可以在其中購買一些用于部署的 AR。我們使用 Arweave 的主網(wǎng)而不是測試網(wǎng),因為它足夠便宜,可以進(jìn)行實驗。

第一步是創(chuàng)建一個 Arwave 錢包并用一些 AR 為其提供資金。有趣的是,最簡單的方法是通過 CEX。

檢查資金是否已到達(dá)你的地址:https: //viewblock.io/arweave

創(chuàng)建你的錢包:

$ mkdir upload-arweave

$ pnpm install arweave?

$ node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console)) > wallet.json

現(xiàn)在你有了一個 wallet.json,其中包含你的私鑰和公鑰。通過運行查找地址:

npx arweave-bundler address

你需要提供少量 AR 資金。有趣的是,最簡單的方法是通過 CEX。

檢查資金是否已到達(dá)你的地址:https: //viewblock.io/arweave

之后,你可以開始編寫幾行代碼來部署某些內(nèi)容。

Arweave Hello World

首先創(chuàng)建一個簡單的網(wǎng)絡(luò)應(yīng)用程序。今天最簡單的就是`pnpm create vite`并選擇最適合你的默認(rèn)值。

然后查看https://cookbook.arweave.dev/,你可以在其中找到大量用于將數(shù)據(jù)(包括部署應(yīng)用程序)上傳到 Arweave 的有用資源,或者繼續(xù)瀏覽博客文章以獲取好的方法。

創(chuàng)建一個名為 ar-deploy.js 的文件并粘貼以下內(nèi)容:

import Arweave from "arweave";?

import fs from "fs";?

// load the JWK wallet key file from disk?

const jwk = JSON.parse(fs.readFileSync('./wallet.json').toString());?

// initialize arweave?

const arweave = Arweave.init({ host: "arweave.net", port: 443, protocol: "https", });?

const tx = await arweave.createTransaction( { data: "Hello world!", }, jwk );?

await arweave.transactions.sign(tx, jwk);?

arweave.transactions.post(tx).then(console.log).catch(console.log); console.log(`https://arweave.net/${tx.id}`);

使用“node ar-deploy.js”運行它……你剛剛將第一個內(nèi)容部署到了 Permaweb!?這很好,但還不夠有用。?

上傳一個文件

下一步是上傳實際文件而不是字符串。為此,你需要處理標(biāo)簽。網(wǎng)關(guān)需要知道它正在提供什么類型的數(shù)據(jù)(例如圖像/png)。

import Arweave from 'arweave';?

import fs from "fs"; // load the JWK wallet key file from disk?

let key = JSON.parse(fs.readFileSync("walletFile.txt").toString());?

// initialize an arweave instance?

const arweave = Arweave.init({});?

// load the data from disk?

const imageData = fs.readFileSync(`iamges/myImage.png`);?

// create a data transaction?

let transaction = await arweave.createTransaction({ data: imageData }, key);?

// add a custom tag that tells the gateway how to serve this data to a browser?

transaction.addTag('Content-Type', 'image/png');?

// you must sign the transaction with your key before posting?

await arweave.transactions.sign(transaction, key);?

// create an uploader that will seed your data to the network?

let uploader = await arweave.transactions.getUploader(transaction);?

// run the uploader until it completes the upload.?

while (!uploader.isComplete) { await uploader.uploadChunk(); }

上傳多個文件

事情開始變得有趣,但在遍歷目錄并將所有文件發(fā)布到 Permaweb 之前,還有最后一個概念需要掌握:理解清單的概念。

將文件上傳到 Arweave 時,每個文件都會分配自己唯一的交易 ID。默認(rèn)情況下,這些 ID 不以任何特定方式分組或組織。

因此,清單是一個 JSON 文件,其中包含一組文件的所有 ID。它還包含一個索引屬性,該屬性指向指向任何交易 ID 的別名。

{ "manifest": "arweave/paths",?

? "version": "0.1.0",?

? "index": { "path": "index.html" },?

? "paths": { "index.html": { "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI" }, "js/style.css": { "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" }, "css/style.css": { "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" }, "css/mobile.css": { "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" }, "assets/img/logo.png": { "id": "QYWh-QsozsYu2wor0ZygI5Zoa_fRYFc8_X1RkYmw_fU" }, "assets/img/icon.png": { "id": "0543SMRGYuGKTaqLzmpOyK4AxAB96Fra2guHzYxjRGo" } } }

Arweave 交易很便宜,但創(chuàng)建如此多的交易遠(yuǎn)非理想,特別是當(dāng)網(wǎng)絡(luò)擁塞時。?

雖然此解決方案可行,但它不是最佳方案,因此我們轉(zhuǎn)向下一個解決方案:Arweave bundles ( ANS-104 )

Arweave bundles

交易捆綁是一種特殊類型的 Arweave 交易。它允許將多個其他交易和/或數(shù)據(jù)項捆綁在其中。由于交易包里含有許多嵌套交易,因此它們是 Arweave 能夠擴(kuò)展到每秒數(shù)千個交易的關(guān)鍵。?

我們的主要要求是能夠?qū)⑽募唾Y產(chǎn)捆綁在一起,以便我們可以在構(gòu)建應(yīng)用程序后以原子方式上傳,從而擁有正確版本的 dApp,而不是零散地上傳單個文件。這也具有成本優(yōu)勢,因為這意味著我們只需為上傳付費一次。

我們考慮使用 Iris(以前稱為 Bundlr),它具有良好的開發(fā)人員體驗,包括允許使用許多代幣進(jìn)行支付,支持不同的鏈并允許在 Arweave 和其他我們沒有的功能之上增加了一層額外的費用需要。?

你可以利用名為arbundles 的開源庫并添加一些粘合功能,從而在不使用 Irys 服務(wù)的情況下利用捆綁功能。

import { bundleAndSignData, createData } from "arbundles";?

const dataItems = [createData("some data"), createData("some other data")];

const signer = new ArweaveSigner(jwk);?

const bundle = await bundleAndSignData(dataItems, signer);

我們的 Arweave 實用程序:arweave-bundler

我們決定創(chuàng)建自己的 Arweave 實用程序,以便直接在 CI/CD 中利用捆綁功能,并使步驟始終可重復(fù)。?

在 Arweave Bundler 的公共存儲庫中,你將找到一個 GitHub Action 和 CLI,用于從目錄上傳靜態(tài)資產(chǎn),這非常適合將單頁應(yīng)用程序 (Single Page App,SPA) 或其他靜態(tài)內(nèi)容發(fā)布到 Arweave。?

如果你想使用GitHub Action,配置如下:

uses: outlierventures/arweave-bundler-action@v0.3.1?

with: directory: build/?

private-key: ${secret.ARWEAVE_PRIVATE_KEY}?

dry-run: false network: arweave.net

確保將私鑰添加到存儲庫的 GitHub Secrets 中。如果你希望使用 CLI,請按照以下步驟捆綁和部署你的 Web 應(yīng)用程序:

npx arweave-bundler upload build/ --private-key ${PRIVATE_KEY}

始終確保你的私鑰存儲為環(huán)境變量。

結(jié)論

Arweave 提供了一種廉價且便捷的方式來永久存儲 Web 應(yīng)用程序前端,證明去中心化存儲比中心化存儲更便宜。另一方面,雖然中心化存儲提供商擁有經(jīng)過驗證的商業(yè)模式,但我們需要等待 Arweave 模型是否能夠通過時間的考驗。主要挑戰(zhàn)是激勵調(diào)整,即費用。在一個沒有租金且只收取一次性費用的系統(tǒng)中,如果節(jié)點不再獲得足夠的獎勵,它們可能會決定離開。

雖然這個發(fā)現(xiàn)過程中最復(fù)雜的部分是在無法訪問大量文檔或示例的情況下找到我們的方法,但我們最終找到了一個有彈性的解決方案,我們希望其他開發(fā)人員能夠從使用 arweave-bundler 簡化其部署過程中受益。

我們的下一個任務(wù)是研究去中心化的域名管理。我們的下一篇文章將重點關(guān)注實施 ENS 和 ANT(Arweave 名稱代幣)所涉及的挑戰(zhàn)和決 策。

熱門
五十路熟妇亲子交尾| 午夜亚洲AV日韩AV无码大全| 97人妻成人免费视频| 国产VA免费精品高清在线观看| 无码人妻久久一区二区三区免费丨 | 成年大片免费视频播放| 我的妺妺H伦浴室无码视频| 狠狠色婷婷久久一区二区| 中文字幕无码家庭乱欲| 日产亚洲一卡2卡3卡4卡网站| 国产午夜激无码AV毛片不| 在线观看特色大片免费网站| 日产乱码一二三区别免费影视| 免费一对一刺激互动聊天软件| 公侵犯玩弄漂亮人妻优| 亚洲熟妇色XXXXX中国少妇Y| 日本国产一区二区三区在线观看| 国产亚洲AV片在线观看播放| 隔着肚兜偷揉酥乳含乳子| 亚洲综合AV色婷婷国产野外 | 黑人处破女免费播放| 50熟妇的长奶头满足了我| 天堂影院一区二区三区四区| 久久青草免费福利资源站| 成人无码区免费A∨电影| 亚洲精品成人AV| 日韩人妻中文无码一区二区三区| 激情无码人妻又粗又大中国人| A级毛片无码免费真人久久| 亚洲AV本道一区二区三区四区| 免费无码观看的AV在线播放| 久久婷婷五月综合成人D啪| 久久99国产精品久久99蜜桃 | 97精品依人久久久大香线蕉97| 无码任你躁久久久久久老妇| 熟妇人妻无码中文字幕老熟妇| 久久综合狠狠综合久久| 国产成人无码AV在线播放无广告| 中国亚州女人69内射少妇| 亚瑟国产精品久久| 人妻熟妇久久久久久精品无码专区 | 国产未成女一区二区| AV无码AV高潮AV喷吹免费| 亚洲成A人片在线观看无码| 色狠狠久久AV五月综合| 美女高潮流白浆娇喘免费网站| 国产精品国产三级国产试看| XXXXX69HD护士19老师| 亚洲色成人网一二三区| 婷婷色香五月综合激激情| 牛和人交VIDE欧关ⅩXOO| 娇喘连连抽搐高潮小说| 国产成人8X视频网站 | 厨房里的激战2类型| 2023国精产品一二二线精华液| 2023国产精品一卡2卡三卡| 啊灬啊灬啊灬快灬高潮了女| 曰本A级毛片无卡免费视频| 亚洲AV成人深夜一区午夜网站| 亚洲AⅤ日韩AV电影在线观看 | 无码中文字幕AV免费放| 日本AⅤ精品一区二区三区| 久久综合狠狠色综合伊人| 美国一面亲上边一面膜下边| 欧美乱熟妇XXXX白浆| 麻豆成人久久精品二区三区免费| 后入内射国产一区二区| 久久精品亚洲精品无码金尊 | 久久99老妇伦国产熟女高清| 国产人与禽ZOZ0性伦| 丰满熟妇岳AV无码区HD| JAPANESE五十路熟妇| 中文字幕JUL975老公不在| CHINESE农村老妓女| 国产超碰人人爽人人做| 国内最真实ⅩⅩⅩ人伦| 国产精品久久久久精品三级| 丁香花在线电影小说观看| WWW.COM.含羞草| CHINESE 麻豆 HD X| 国产CHINASEX对白VID| 黑人巨大JEEP日本人| 美女内射毛片在线看| 久久久久蜜桃精品成人片公司| 黑人双人RAPPER剧情介绍| 狂躁美女大BBBBBB视频U| 久久久久亚洲AV无码专| 欧洲免费无码视频在线| 欧美黑人巨大最猛性XXXXX| 乱中年女人伦AV二区| 日韩精品无码专区免费播放| 亚洲AV成人无码网站大全唐人| 中国 韩国 日本 免费看片| 中国熟妇人妻XXXXX中文| 暴躁少女CSGO| 成人黄网站高清免费视频| YY8090韩国理伦片在线| 国产美女在线精品免费观看| 国产精品一区二区国产馆蜜桃 | 激情综合色五月丁香六月欧美| 女人夜夜春高潮爽A∨片传媒| 你下水好多下水道BD| 偷拍 拍自 欧美色区| 中文字幕丰满伦子无码| 国产精品99久久久久久宅男| 久久亚洲中文字幕精品一区| 少妇被躁爽到高潮无码文| 调教后把奶头拴在跑步机上虐 | 亚洲AⅤ在线无码播放毛片一线天 亚洲AⅤ优女AV综合久久久 | 麻花传媒剧在线MV免费观看| 四虎AV永久在线精品免费观看| 野花香高清在线观看视频播放免费 | 女教师的凌脣教室在线| 先锋影音人妻啪啪VA资源网站| 18禁止免费观看试看免费大片| AA级女人大片喷水视频免费| 国产帅男男GAY网站视频| 欧美熟妇激情一区二区三区| 日韩一区二区三区无码人妻视频 | 亚洲尤码不卡AV麻豆| 公翁的粗大放进我的秘密小说| 老熟女DHXⅩXXX88老妇女| 男男喷液抽搐高潮呻吟AV| 欧美白人乱大交XXXX潮喷| 人妻少妇乱孑伦无码专区蜜柚 | 精品日产卡一卡二卡927| 久久久久精品无码AV| 免费人成网站在线观看欧美| 欧洲人妻丰满AV无码久久不卡| 亚洲AV无码片区一区二区三区| 亚洲日韩精品无码专区网址| 粗大挺进朋友未婚妻| 乱人伦人妻中文字幕无码| 亚洲AV无码丰满尖叫高潮| 成人无码H动漫在线播放| 麻豆人妻少妇精品无码专区2| 无码人妻丰满熟妇区毛片18| MM1313午夜视频在线观看| 久久久精品成人免费观看国产| 无码精品一区二区三区视频色欲网| 亚洲 A V无 码免 费 成| OLDMACDONALD老人大包| 久久久久免费精品国产| 午夜欧美精品久久久久久久| 成人精品一区二区www| 免费观看大片的APP视频| 亚洲欧美日韩在线观看一区二区三| 91精品人妻人人做人碰人人爽 | 办公室熟妇人妻久久精品| 久碰人妻人妻人妻人妻人掠| 亚洲AV蜜桃无码精品无码| 在线日韩日本国产亚洲| 国精产品一区二区三区糖心| 麻豆丰满少妇CHINESE| 亚洲成在人线AV| 国产激情一区二区三区| 久久人人爽人人爽AV片| 亚洲AV无码国产综合专区| 国产成人亚洲精品另类动态图| 日本19禁啪啪吃奶大尺度| 99国精品午夜福利视频不卡| 久久人人爽人人爽人人片AV不| 亚洲国产成人爱AV网站| HEYZO中文字幕无码| 里番本子库绅士ACG全彩无码| 亚洲精品国产综合久久久久紧| YSL千人千色T9T9T9最新| 蜜臀久久AV无码牛牛影视| 亚洲人77777在线观看| 黑人巨大猛烈捣出白浆视频在线| 我的娇妻QUEEN| 国产精品99久久久久久猫咪| 熟妇人妻无码XXX视频| 高清乱码一区二区三区| 人妻丰满熟妇AⅤ无码区在线电影| 97久久精品人人爽人人爽蜜臀| 美女露胸 0无挡挡| 中文无码精品一区二区三区| 巨爆乳寡妇中文在线观看| 亚洲最大综合久久网成人| 久久精品国产亚洲AV大全| 国产精品成人片在线观看| 国产一区二区三区久久精品| 欧美熟老妇人多毛OOXⅩ| 成人国产精品一区二区免费| 粉嫩虎白女流水白浆在线播放| 女人爽到高潮的免费视频| 揄拍成人国产精品视频| 久久青榴社区福利无码| 亚洲色偷偷综合亚洲AV| www亚洲一级AV仑片| 欧洲乱码一卡2卡三卡4卡高清| JAPANESE 大战黑人| 欧美一区二区在线视频人妻| 天堂А√在线最新版在线| 纯肉高H爽文粗大| 少妇婬荡久久久久AV无码| 88久久精品无码一区二区毛片 | 国产精品国产高清国产AV| 无码免费伦费影视在线观看 |