WeaveDB ve 4EVERLAND Kullanarak Arweave’de Tamamen Merkeziyetsiz Bir Blog Oluşturmak
Bu öğretici rehberde, WeaveDB ve 4EVERLAND kullanarak tamamen merkeziyetsiz bir blog oluşturmayı öğreneceksiniz.
WeaveDB Nedir?
WeaveDB, Arweave blok zincirinde Warp Sözleşmeleri (SmartWeave) tarafından desteklenen bir NoSQL veritabanıdır.
Sorgu API’leri, Google’ın Firestore’una benzer, ancak tamamen merkeziyetsizdir.
- Veriler, herkesin izinsiz erişebileceği Arweave kalıcı deposunda saklanır.
- Kullanıcı kimlik doğrulaması, MetaMask ve ArConnect gibi kripto cüzdanları kullanılarak saf kriptografi ile yapılır.
- SmartWeave, tıpkı web2 uygulamaları gibi web merkezli büyük ölçekli dapp’ler için depolanan verilere karmaşık hesaplamalar uygulamayı mümkün kılar.
WeaveDB hakkında daha fazla bilgi edinmek için buraya tıklayın.
4EVERLAND Nedir?
4EVERLAND, temel yetenekleri olarak depolama, bilgi işlem ve ağı bütünleştiren bir Web 3.0 bulut bilgi işlem platformudur. Pahalı ve karmaşık sunucu altyapılarına ihtiyaç duymadan geliştiricilerin merkeziyetsiz uygulamalarını oluşturmaları ve barındırmaları için daha uygun fiyatlı ve verimli bir yol sağlamayı amaçlamaktadır.
4EVERLAND hakkında daha fazla bilgiyi burada bulabilirsiniz.
Arweave Nedir?
Arweave, merkeziyetsiz bir cihaz ağında veri depolama sunan bir Web3 protokolüdür. Verileri kalıcı olarak depolamaya ve ağda depolanan içeriğe Arweave ağ geçidi aracılığıyla erişmeye teşvik edilen bir dizi node’a sahiptir.
Başlamak İçin
4EVERLAND, aşağıdakiler dahil olmak üzere büyük dosya depolama gereksinimleri olan WeaveDB kullanıcıları için bir çözüm sunar:
- Aktarılan sorguların işlenebilmesi için, bir aktarma işi için WeaveDB eşgörünümünde önceden ayarlanabilen
job ID
,allowed relayers
veextra data schema
dahil tüm koşulların karşılanması gerekir. - Bir sorgu göndermek ve meta verileri eklemek için, veri sahibi meta verileri imzalar ve hem
signed query
hem denote
’u aktarıcıya gönderir. - Aktarıcı,
note
’u Arweave’e yüklemek için 4EVERLAND’ı kullanır ve daha sonra ekstra veri olarak eklenen ve Warp üzerindeki WeaveDB sözleşmesine bir işlem olarak gönderilmeden önce eip712 ile imzalanan birtx.id
alır. - WeaveDB sözleşmesi, eip712 imzalarının yanı sıra
job ID
,allowed relayers
veextra data schema
’yi doğrular. - Koleksiyondaki erişim denetimi kuralları,
signer
gerçektenowner
iseowner
vetx.id
verilerinin eklenmesini içeren ilk sorgu verilerinin değiştirilmesine izin verir. note
’a erişmek için ön uç dApp, WeaveDB’den meta verileri alabilir venotearweave.net/[tx.id]
’dekinote
’yi almak içintx.id
’yi kullanabilir.
Makaleleri yayınlamak üzere basit bir blog oluşturmak için 4EVERLAND + WeaveDB kullandığınızı varsayarsak, her makale aşağıdaki öğeleri içermelidir:
- Başlık
- Yazar (makaleyi gönderen kişinin cüzdan adresi)
- Yayın tarihi
- İçerik
Bunu başarmak için yapmanız gerekenler:
- Makale verilerini depolamak için bir WeaveDB sözleşmesi deploy edin.
- Makale içeriğini 4EVERLAND aracılığıyla Arweave’e yüklemek için bir Aktarıcı çalıştırın ve makale hash değerini WeaveDB’ye yüklenen makale verilerine ekleyin.
- WeaveDB, makale sahibini imzalayana göre etiketleyecek ve verileri Arweave’e yazacaktır.
WeaveDB Sözleşmesini Deploy Edin
Depoyu Klonla
git clone https://github.com/weavedb/weavedb.git
cd weavedb
yarn
WeaveDB Sözleşmelerini Deploy Edin
node scripts/generate-wallet.js mainnet
yarn deploy
Veya bu öğreticiyi takip edebilir ve Web Konsolunu kullanabilirsiniz .
Şimdi dağıtılan sözleşme için contractTxId
almalısınız.
WeaveDB’yi daha önce hiç kullanmadıysanız, bu hızlı başlangıç eğitimini incelemenizi öneririz.
Veritabanı Bulut Sunucusunu Yapılandırın
Veri Şeması Kurulumu
Sadece 1 koleksiyon oluşturacağız.
notes
: Bir not koleksiyonu
const schema = {
type: "object",
required: ["date", "id", "author", "title"],
properties: {
title: {
type: "string",
},
date: {
type: "number",
},
id: {
type: "string",
},
author: {
type: "string",
},
},
}
await sdk.setSchema(schema, "notes", { ar: wallet })
date
: Yayınlanma tarihiid
: Arweave İşlem Kimliğiauthor
: Notun yazarıtitle
: Notun başlığı
Relayer Job’u Kurun
Basit bir aktarıcı işi ayarlayın.
relayerAddress
: WeaveDB sorgularını imzalamak ve aktarmak için aktarıcının bir EVM adresi.schema
: Aktarıcı,date
,id
veauthor
olmak üzere 3 adet ekstra veri ekleyecektir.jobID
: keyfi jobID’miz4ever
olacaktır.
const job = {
relayers: [relayerAddress],
schema: {
type: "object",
required: ["date", "id", "author"],
properties: {
date: {
type: "number",
},
id: {
type: "string",
},
author: {
type: "string",
},
},
},
}
await sdk.addRelayerJob("4ever", job, { ar: wallet })
Bu basit ayarlarla aktarıcının ’i ekleyip 4EVERLAND’a yüklemeden önce author
, title
ve gövde içeriğini almasını bekliyoruz.
Son olarak, imzalı WeaveDB sorgusunu (author
, date
, id
) ek verileriyle imzalı sorguya aktarır.
Erişim Kontrolü Kurallarını Ayarlayın
const rules = {
"let create,update": {
"resource.newData.author": { var: "request.auth.extra.author" },
"resource.newData.date": { var: "request.auth.extra.date" },
"resource.newData.id": { var: "request.auth.extra.id" },
},
"allow create": {
"==": [{ var: "request.auth.signer" }, { var: "resource.newData.author" }],
},
"allow update,delete": {
"==": [{ var: "request.auth.signer" }, { var: "resource.data.author" }],
},
}
await sdk.setRules(rules, "notes", { ar: wallet })
Yerel gRPC Nod’u Kurun
Aktarıcı için daha iyi bir performans için yerel bir grpc node’u kurmak isteyebilirsiniz.
Bunu yapmak için bu öğreticiyi izleyin.
NextJS Ön Uç UYGULAMASI
Ortam Değişkenlerini Ayarlayın
.env.local
dosyası oluşturun ve aşağıdaki değişkenleri ayarlayın.
WEAVEDB_RPC_NODE="localhost:8080"
RELAYER_PRIVATEKEY="Relayer_EOA_Privatekey"
NEXT_PUBLIC_WEAVEDB_CONTRACT_TX_ID="Your_Contract_Tx_Id"
NEXT_PUBLIC_WEAVEDB_RPC_WEB="http://localhost:8080"
Relayer’ı Kurun
Relayer’lar, zincirler arasında varlık veya bilgi göndermek için kullanılan altyapıdır ve WeaveDB’nin durumunda, geliştirdikleri Relayer, diğer zincirlerden WeaveDB’ye herhangi bir veriyi doğrudan Arweave’de depolayarak köprülemek için kullanılabilir. eip-712 imzalarınızı kullanarak sizin adınıza sorgu yürütebilir. Bu, zincir dışı oracle’lar ile zincirler arası durum doğrulamaları yaparken kullanışlı olur.
Bu durumda aktarıcıyı NextJS sunucusuz API olarak kuracağız.
Aktarıcı
- Bir
note
nesnesi oluşturur - 4EVER’e yükler
- Kullanıcı imzalı parametrelere fazladan
{ id, author, date }
verisi ekler - ve sorguyu WeaveDB’ye iletir.
import { S3 } from "@aws-sdk/client-s3";
const contractTxId = process.env.NEXT_PUBLIC_WEAVEDB_CONTRACT_TX_ID
const { isNil } = require("ramda")
const SDK = require("weavedb-node-client")
// Create S3 instance
// View API key in 4EVERLAND Dashboard
const accessKey = "YOUR_ACCESS_KEY";
const secretKey = "YOUR_SECRET_KEY";
const s3Instance = new S3({
endpoint: "https://endpoint.4everland.co",
credentials: {
accessKeyId: accessKey,
secretAccessKey: secretKey,
},
region: "eu-west-2",
})
export default async (req, res) => {
const { body, params } = JSON.parse(req.body)
const note = {
title: params.query[0].title,
body,
author: params.caller,
date: Date.now(),
}
const data = JSON.stringify(note);
let error = null
let success = false
let relay_tx = null
try {
//Upload note to 4EVER arbucket and get tx.id
await s3Instance.putObject({
Bucket: 'YOUR_BUCKET_NAME',
Key: 'note.json',
Body: data,
ContentType: 'application/json',
});
const result = await s3Instance.headObject({
Bucket: 'YOUR_BUCKET_NAME',
Key: 'note.json',
});
const 4ever_txid = result.Metadata["arweave-hash"]
//Signing and uploading to WeaveDB
if (!isNil(4ever_txid)) {
const sdk = new SDK({
contractTxId,
rpc: process.env.WEAVEDB_RPC_NODE,
})
relay_tx = await sdk.relay(
params.jobID,
params,
{ id: 4ever_txid, author: note.author, date: note.date },
{
jobID: params.jobID,
privateKey: process.env.RELAYER_PRIVATEKEY,
}
)
if (relay_tx.success) {
success = true
} else {
error = relay_tx.error
}
} else {
error = relay_tx
}
} catch (e) {
console.log(e)
error = e
}
res.status(200).json({ success, error, tx: relay_tx })
}
Kullanıcı Arayüzü Uygulaması
Daha sonra yaratıcı olabilir ve yukarıdaki çerçeveye dayalı bir ön uç merkezi olmayan uygulama uygulayabilirsiniz. Bir referans arayüzü aşağıda gösterilmiştir.
Sonuç Olarak
İşte bu kadar! Tamamen merkeziyetsiz bir blogu tamamlamak üzere 4EVERLAND + WeaveDB’yi birleştirmek için az önce birkaç satır kod kullandınız!