Programatik Kayıt: Ajanlar ve CI İçin Cüzdanla Oturum Açma ve API Anahtarı Oluşturma
AI Agent'lar, betikler ve CI iş akışları için bir tarayıcı olmadan Ethereum cüzdan imzası (EIP-191) kullanarak programatik olarak kaydolun ve bir API anahtarı oluşturun.
Otonom AI Agent'lar, CI ardışık düzenleri ve tarayıcı olmadan çalışan otomatik betikler için BlockVectra, Ethereum cüzdan imzalarına (EIP-4361 / EIP-191) dayalı programatik bir oturum açma ve hesap açma iş akışı sağlar.
Anahtar güvenliği
Özel anahtarları, oturum token'larını veya API anahtarlarını asla yapay zeka ile yapılan konuşmalara yapıştırmayın veya MCP araç parametreleri olarak iletmeyin.
Kaydolmadan önce, anahtarsız genel uç nokta olan https://api.blockvectra.com/v1/robinhood_mainnet/public adresini deneyebilirsiniz (yalnızca cüzdan JSON-RPC yöntemleri, Data API bir anahtar gerektirir; yöntemler ve sınırlar /v1/chains koşullarına tabidir); kota yetersizse bir hesap açın.
İş akışına genel bakış
Programatik kayıt ve anahtar sağlama akışı dört adımdan oluşur:
- Challenge isteğinde bulunun: Sunucu tarafından oluşturulan bir oturum açma mesajı almak için
POST /auth/siwe/challengeuç noktasına bir istek gönderin. - Mesajı imzalayın: Bu tam mesajı, bir Ethereum EOA cüzdanı ile EIP-191 (
personal_sign) kullanarak imzalayın. - Oturum açın / hesap oluşturun: Birebir mesajı ve imzayı
POST /auth/siwe/loginuç noktasına gönderin. Bir cüzdan için yapılan ilk oturum açma işleminde, otomatik olarak bir hesap oluşturulur (account_created: true). Yeni hesaplar kaydolduklarında 30,000,000 CU kazanır — kredi kartı gerekmez. - API anahtarı oluşturun:
POST /keysuç noktasını çağırmak ve bir API anahtarı oluşturmak için oturum token'ını kullanın.
Eksiksiz çalıştırılabilir örnekler
Buradan başlayın: yerel bir Ethereum EOA imzalayıcısı kullanın, bir anahtar oluşturun ve bunu eth_blockNumber ile doğrulayın. Bash örneği için curl, jq ve Foundry cast gereklidir. Cüzdan kimlik bilgilerini yerel imzalama ortamınızda tutun.
Eksiksiz başlangıç şablonu: blockvectra/agent-quickstart
Aşağıdaki betikler cüzdan kimlik bilgilerini okur, challenge ve oturum açma dizisini tamamlar, bir API anahtarı sağlar, ortam yapılandırması için export BLOCKVECTRA_API_KEY=... dışa aktarır veya yazdırır ve bir doğrulama eth_blockNumber isteği gönderir:
Yeni anahtarların aktif hale gelmesi birkaç saniye sürer; bu örnekler otomatik olarak yeniden dener.
BASE=https://console-api.blockvectra.com/v1
# $ADDR: Ethereum cüzdan adresi (0x...)
# $PK: cüzdan özel anahtarı, bir gizli bilgi yöneticisinden yüklenir (asla betiklerde sabit kodlamayın)
# 1. Sunucu tarafından oluşturulan SIWE mesajını alın (Origin başlığını atlayın)
curl -s "$BASE/auth/siwe/challenge" -H 'Content-Type: application/json' \
-d "{\"address\":\"$ADDR\",\"purpose\":\"login\"}" > challenge.json
jq -r .message challenge.json > msg.txt
# 2. Mesajı EIP-191 personal_sign ile tam olarak imzalayın
SIG=$(cast wallet sign --private-key "$PK" "$(cat msg.txt)")
# 3. Oturum açmak için birebir mesajı ve imzayı gönderin (Origin başlığını atlayın; ref isteğe bağlıdır)
jq -n --rawfile m msg.txt --arg s "$SIG" '{message: ($m | rtrimstr("\n")), signature: $s, ref: "docs-signup"}' |
curl -s "$BASE/auth/siwe/login" -H 'Content-Type: application/json' -d @- > session.json
TOKEN=$(jq -r .session.token session.json)
# 4. Bir API anahtarı oluşturun (gizli anahtar yalnızca bir kez döndürülür)
KEY_RESP=$(curl -s "$BASE/keys" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"label":"agent-key"}')
export BLOCKVECTRA_API_KEY=$(echo "$KEY_RESP" | jq -r .api_key)
# 5. Anahtarı x-api-key istek başlığında ileterek JSON-RPC'yi çağırın
RPC_DEADLINE=$((SECONDS + 10))
while true; do
RPC_TIMEOUT=$((RPC_DEADLINE - SECONDS))
if ((RPC_TIMEOUT <= 0)); then
printf '%s' "${RPC_BODY:-}"
break
fi
RPC_RESP=$(curl -s --max-time "$RPC_TIMEOUT" -w '\n%{http_code}' "https://api.blockvectra.com/v1/robinhood_mainnet" \
-H "x-api-key: $BLOCKVECTRA_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}') || { rc=$?; echo "request failed (curl exit $rc)" >&2; exit $rc; }
RPC_STATUS=${RPC_RESP##*$'\n'}
RPC_BODY=${RPC_RESP%$'\n'*}
if ((SECONDS + 2 < RPC_DEADLINE)) &&
printf '%s' "$RPC_BODY" | jq -e --arg status "$RPC_STATUS" '
($status == "401" and .error.data.reason == "invalid_api_key") or
($status == "503" and .error.code == -32021)
' >/dev/null 2>&1; then
sleep 2
else
printf '%s' "$RPC_BODY"
break
fi
doneTemel URL ve programatik mod
Tüm kimlik doğrulama ve anahtar yönetimi uç noktaları resmi temel URL'yi kullanır:
https://console-api.blockvectra.com/v1Origin başlığının atlanması
Programatik istekler programatik modda çalışır:
- Hem challenge (
POST /auth/siwe/challenge) hem de oturum açma (POST /auth/siwe/login) istekleriOriginbaşlığını içermemelidir (curlve standart HTTP istemcileri varsayılan olarak bu başlığı atlar; manuel olarak eklemeyin). - Bir
Originbaşlığı gönderilir ancak yapılandırılmış bir web konsolu etki alanı değilse (boş dize veyanulldahil), challenge isteği HTTP 400invalid_requestdöndürür. - Oturum açma anındaki mod challenge moduyla eşleşmezse (örneğin,
Originolmadan programatik bir challenge talep edip ardından birOriginbaşlığı ile oturum açma göndermek veya tam tersi), oturum açma isteğireason: domain_mismatchile HTTP 400siwe_invaliddöndürür.
Mesaj bütünlüğü ve cüzdan gereksinimleri
- Birebir imzalama ve gönderim: İstemciler, mesaj metnini challenge uç noktası tarafından döndürüldüğü şekliyle tam olarak imzalamalı ve göndermelidir. Boşlukları, etki alanını, zincir kimliğini veya herhangi bir alanı değiştirmeyin. Herhangi bir değişiklik,
reason: signatureile HTTP 400siwe_invalidile sonuçlanır. - Desteklenen cüzdanlar: Ethereum mainnet (Chain ID 1) Harici Olarak Sahip Olunan Hesaplar (EOA). İmza 65 baytlık bir ECDSA imzası (
personal_sign) olmalıdır. Sözleşme cüzdanları (EIP-1271) ve akıllı hesaplar desteklenmez. - Challenge geçerliliği: Her challenge nonce'ı tek kullanımlıktır ve 5 dakika sonra sona erer.
İstek gövdesi ve kayıt ilişkilendirmesi (isteğe bağlı)
POST /auth/siwe/login istek gövdesi, gerekli kimlik doğrulama parametrelerini ve isteğe bağlı kayıt ilişkilendirme alanlarını kabul eder:
- Gerekli alanlar:
message: Challenge uç noktasından alınan eksiksiz SIWE mesaj dizesi.signature: Bir Ethereum cüzdanı ile EIP-191 aracılığıylamessageimzalanarak üretilen 65 baytlık onaltılık imza (0xönekli).
- İsteğe bağlı ilişkilendirme alanları (yalnızca yeni bir hesap oluşturulduğunda bir kez kaydedilir; sonraki oturum açmalarda yok sayılır):
ref:^[a-z0-9._-]{1,64}$ile eşleşen küçük harfli bir kanal token'ı (küçük harf ASCII harfler, rakamlar,.,_,-, 1–64 karakter). Örneğin, otonom ajanlar bunu çerçevelerine veya çalışma zamanı tanımlayıcılarına (ör.my-agent.v1) ayarlayabilir. Uyumsuz değerler (büyük harfler, boş dizeler, fazla uzunluk veya desteklenmeyen karakterler dahil), harf dönüşümü yapılmaksızın HTTP 400invalid_requestdöndürür ve hesap oluşturulmasını engeller; geçerli olmadığında atlayın veyanulliletin.referrer: Bir kaynak URL veya ana bilgisayar adı dizesi; yalnızca dize olmayan türler HTTP 400 döndürür.
signup_method gibi tanımsız alanların gönderilmesi HTTP 400 invalid_request döndürür.
Oturum token'ları ve API anahtarları
Oturum token'ı yaşam döngüsü
- Biçim:
rgs_ve ardından gelen 64 küçük harfli onaltılık karakter. - Geçerlilik: Mutlak 7 günlük kullanım ömrü; 24 saatlik boşta kalma süresinden sonra otomatik olarak sona erer.
- Yenileme token'ı (refresh token) yok: Bir oturum token'ının süresi dolduğunda, yeni bir challenge ve oturum açma akışı başlatın.
- Başlık: Oturum token'ını
Authorization: Bearer rgs_...istek başlığında iletin.
API anahtarı oluşturma
- Bir API anahtarı oluşturmak için oturum token'ı ile
POST /keysuç noktasını çağırın (rgw_ve ardından gelen 64 onaltılık karakter). - Hesap başına, iptal edilmemiş ve süresi dolmamış en fazla 20 (
active+disabled) anahtar; süresi dolmuş anahtarlar sayılmaz. Bunun aşılması,reason: active_keysvelimit: 20ile HTTP 409key_limit_reacheddöndürür; önce bir anahtarı iptal edin. Bu sınır, hesabın tüm kimlikleri, oturumları ve zincirleri genelinde geçerlidir. Anahtar oluşturma ve rotasyonu da 24 saatte 20 ile sınırlıdır; bunun aşılması,Retry-After: 3600ile HTTP 429rate_limiteddöndürür. - İsteğe bağlı sınır ve süre sonu:
cu_cap(anahtar için ömür boyu CU sınırı, bu esnek bir sınırdır) ve süre sonu (expires_in_secsveyaexpires_at, anahtar politikası tarafından izin verilen maksimum güne kadar) belirtebilirsiniz; süresi dolduğunda veya sınır tükendiğinde sunucu 403 döndürür (JSON-RPC-32025, nedenkey_expiredveyakey_cap_exhausted). - Gizli
api_keyoluşturma sırasında yalnızca bir kez döndürülür. Bunu hemen gizli bilgi yöneticinizde veya ortam değişkenlerinizde güvenli bir şekilde saklayın. - Tek bir API anahtarı, JSON-RPC ve Data API üzerinde desteklenen tüm zincirlerde çalışır.
Oturumunuzu veya API anahtarınızı mı kaybettiniz?
BlockVectra'da, bir ajanın hesap kimliği kayıt sırasında kullanılan Ethereum cüzdan adresine bağlıdır. Oturum token'ınızın süresi dolarsa veya bir API anahtarı kaybolur veya sızdırılırsa, yalnızca o cüzdanı kullanarak tam kontrolü geri kazanabilirsiniz:
- Aynı cüzdanla yeniden kimlik doğrulaması yapın: Bir challenge talep edin, aynı cüzdanla imzalayın ve oturum açma isteğini (
POST /auth/siwe/login) gönderin. Sunucu imzayı doğrular,account_created: falseile mevcut hesapta oturum açar ve yeni bir oturum token'ı düzenler. - Yeni bir API anahtarı oluşturun: Yeni oturum token'ı ile
{"label": "..."}veAuthorization: Bearer <token>başlığıylaPOST /keysçağrısı yapın. Uç nokta, oluşturulan anahtar ayrıntılarınıkeyiçinde ve tek seferlik gizli anahtarıapi_keyiçinde içeren HTTP 201 döndürür. Bu anahtarı hemen ortam değişkenlerinizde veya gizli bilgi yöneticinizde saklayın. - Hesap için tüm anahtarları listeleyin:
- Uç nokta:
GET /keys - Başlık:
Authorization: Bearer <token> - Sorgu parametresi: isteğe bağlı
include_revoked=true(trueolduğunda iptal edilen anahtarları içerir; varsayılan olarak yalnızca aktif/devre dışı anahtarları getirir). - Yanıt:
{"items": [...]}JSON ile HTTP 200.itemsdizisindeki her öğe şunları içerir:key_id: benzersiz anahtar tanımlayıcısı (dize)label: anahtar etiketi (dize veyanull)status: durum ("active","disabled"veya"revoked")created_at: oluşturma zaman damgası (ISO 8601 dizesi)revoked_at: iptal zaman damgası (dize veya iptal edilmemişsenull)
- Uç nokta:
- Kullanılmayan veya güvenliği ihlal edilmiş anahtarları iptal edin:
- Uç nokta:
POST /keys/{key_id}/revoke(not: yolda hedefkey_idilePOSTkullanır; boş istek gövdesi) - Başlık:
Authorization: Bearer <token> - Davranış: idempotent;
activeveyadisableddurumundaki anahtarların her ikisi de iptal edilebilir. Zaten iptal edilmişse, değişmeden HTTP 200 döndürür. İptal işleminden sonra, bu anahtarı kullanan istekler reddedilir. - Yanıt: İptal edilen anahtar nesnesini döndüren HTTP 200 (alanlar yukarıdaki anahtar nesnesiyle eşleşir;
status: "revoked"verevoked_atiçinde bir zaman damgası bulunur).
- Uç nokta:
Anahtar ve gizli bilgi güvenliği
Cüzdan özel anahtarlarını ve API anahtarlarını ortam değişkenlerinde veya bir gizli bilgi yöneticisinde saklayın. Bunları asla kod depolarına commit etmeyin, loglara yazmayın veya yapay zeka sohbet konuşmalarına yapıştırmayın.
Güvenlik önerileri
- Kısa süreli anahtarlar kullanın ve işiniz bittiğinde iptal edin: Otomatik veya geçici görevler için
expires_in_secsile kısa ömürlü anahtarlar oluşturun ve çalışma tamamlandığında bunları hemenPOST /keys/{key_id}/revokearacılığıyla iptal edin.
Kayıt hız sınırları (signup_rate_limited)
Hesap oluşturma kayıt hız sınırlarına tabidir. IP başına token kovası 100 hesap kapasitesine sahiptir ve IPv4 adresi veya IPv6 /64 öneki başına saatte 100 hesap hızında yenilenir; SIWE ve OAuth kaydı tarafından paylaşılır:
- Kayıt sınırları aşıldığında,
POST /auth/siwe/loginbeklenecek saniye sayısını belirten birRetry-Afterbaşlığı ile HTTP 429signup_rate_limiteddöndürür. reasonalanı sınır kapsamını ayırt eder:per_ip: istekte bulunan IP öneki için kayıt bütçesi tükenmiştir.global: toplam platform kayıt sınırı tükenmiştir.
- Kayıt hız sınırları yalnızca yeni hesap kayıtlarını değerlendirir. Mevcut hesapların oturum açması kayıt hız sınırları tarafından engellenmez.
İlgili kaynaklar
- Anahtarsız MCP sunucusu ve makine tarafından okunabilir bağlam dosyaları hakkında bilgi edinmek için AI Agent entegrasyon rehberini okuyun.
- Çok dilli istemci örnekleri için Hızlı Başlangıç sayfasını inceleyin.
- Tam hata kodları, nedenleri ve otomatik kurtarma eylemleri için Hata referansını inceleyin.
Sonraki adımlar
x-api-key: $BLOCKVECTRA_API_KEYile ilk JSON-RPC veya Data API çağrınızı gönderin.GET /v1/accountkullanarak hesap bakiyesini ve limitlerini kontrol edin.- Bakiyeyi korumak için Agent programatik bakiye yükleme rehberini takip edin.
Son güncelleme:
Tek anahtar, çok zincir
Aynı API anahtarı desteklenen her zincirde çalışır. URL'lerin nasıl yapılandırıldığını, zincirlerin programatik olarak nasıl keşfedildiğini ve bakiyeler ile limitlerin nasıl havuzlandığını öğrenin.
QuickNode karşılaştırması
Aylık bir RPC aboneliği olmadan, desteklenen dönemsel RPC okumaları için BlockVectra'yı kullanın; kimlik doğrulamalı erişim, ağ gas ücreti hariç $0.01 minimum bakiye yüklemesi ile uygun ücretsiz kredileri veya kullanım bazlı faturalandırmayı kullanır.