WeaveDB ve 4EVERLAND Kullanarak Arweave’de Tamamen Merkeziyetsiz Bir Blog Oluşturmak

Onur Sarayli
5 min readMay 13, 2023

--

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:

  1. 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 ve extra data schema dahil tüm koşulların karşılanması gerekir.
  2. Bir sorgu göndermek ve meta verileri eklemek için, veri sahibi meta verileri imzalar ve hem signed query hem de note’u aktarıcıya gönderir.
  3. 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 bir tx.idalır.
  4. WeaveDB sözleşmesi, eip712 imzalarının yanı sıra job ID, allowed relayersve extra data schema’yi doğrular.
  5. Koleksiyondaki erişim denetimi kuralları, signergerçekten ownerise ownerve tx.idverilerinin eklenmesini içeren ilk sorgu verilerinin değiştirilmesine izin verir.
  6. note’a erişmek için ön uç dApp, WeaveDB’den meta verileri alabilir ve notearweave.net/[tx.id]’deki note’yi almak için tx.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:

  1. Makale verilerini depolamak için bir WeaveDB sözleşmesi deploy edin.
  2. 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.
  3. 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 contractTxIdalmalı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 tarihi
  • id: Arweave İşlem Kimliği
  • author: 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, idve authorolmak üzere 3 adet ekstra veri ekleyecektir.
  • jobID: keyfi jobID’miz 4everolacaktı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, titleve 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 notenesnesi 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!

--

--

Onur Sarayli
Onur Sarayli

Written by Onur Sarayli

Community Manager | Entrepreneur | Crypto Investor | Interactive Marketing | Blockchain Enthusiast | Metaverse | Web3

No responses yet