zero-sense / deploy.ps1
salma
feat: Stellar Testnet deployment configurations, automated deploy script, and testnet contract addresses
58fbf9f
Raw
History Blame Contribute Delete
12.9 kB
$ErrorActionPreference = "Continue"
$env:PATH = "$env:USERPROFILE\.cargo\bin;$env:PATH"
$NETWORK = "testnet"
$IDENTITY = "zerosense-dev"
$XLM = "CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC"
$TARGET = "wasm32v1-none"
$OUT = "deploy"
$LOG = "$OUT\contract_ids.env"
New-Item -ItemType Directory -Force -Path $OUT | Out-Null
Set-Content $LOG "# ZeroSense Contract IDs - Stellar $NETWORK"
$ADMIN = (stellar keys address $IDENTITY).Trim()
Write-Host "Admin: $ADMIN"
function Find-Wasm($name) {
$dir = "contracts\$name\target\$TARGET\release"
$w = Get-ChildItem $dir -Filter "*.wasm" -ErrorAction SilentlyContinue | Select-Object -First 1
if (-not $w) { throw "No wasm for $name in $dir" }
return $w.FullName
}
function Build-If-Needed($name) {
$dir = "contracts\$name\target\$TARGET\release"
$existing = Get-ChildItem $dir -Filter "*.wasm" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($existing) {
Write-Host "${name}: already built, skipping."
return
}
Write-Host "Building $name ..."
Push-Location "contracts\$name"
& cargo rustc --manifest-path=Cargo.toml --crate-type=cdylib --target=wasm32v1-none --release
Pop-Location
Write-Host "${name}: built."
}
function Deploy-Plain($name) {
Write-Host "Deploying $name ..."
$wasm = Find-Wasm $name
$lines = & stellar contract deploy --wasm $wasm --source $IDENTITY --network $NETWORK 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Host "Deployment of $name failed. Full log output:" -ForegroundColor Red
$lines | ForEach-Object { Write-Host " $_" -ForegroundColor Red }
exit 1
}
$cid = ($lines | ForEach-Object { $_.ToString().Trim() } | Where-Object { $_ -match '^C[A-Z2-7]{55}$' } | Select-Object -Last 1)
if (-not $cid) { $cid = ($lines | ForEach-Object { $_.ToString().Trim() } | Where-Object { $_ -ne "" } | Select-Object -Last 1) }
Write-Host "$name deployed: $cid"
Write-Host " https://stellar.expert/explorer/testnet/contract/$cid"
Add-Content $LOG "$($name.ToUpper() -replace '-','_')_ID=$cid"
return $cid
}
function Deploy-Args($name, [string[]]$extra) {
Write-Host "Deploying $name (with constructor args) ..."
$wasm = Find-Wasm $name
$cmdArgs = @("contract","deploy","--wasm",$wasm,"--source",$IDENTITY,"--network",$NETWORK,"--") + $extra
$lines = & stellar @cmdArgs 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Host "Deployment of $name with args failed. Full log output:" -ForegroundColor Red
$lines | ForEach-Object { Write-Host " $_" -ForegroundColor Red }
exit 1
}
$cid = ($lines | ForEach-Object { $_.ToString().Trim() } | Where-Object { $_ -match '^C[A-Z2-7]{55}$' } | Select-Object -Last 1)
if (-not $cid) { $cid = ($lines | ForEach-Object { $_.ToString().Trim() } | Where-Object { $_ -ne "" } | Select-Object -Last 1) }
Write-Host "$name deployed: $cid"
Write-Host " https://stellar.expert/explorer/testnet/contract/$cid"
Add-Content $LOG "$($name.ToUpper() -replace '-','_')_ID=$cid"
return $cid
}
function Call-Init($cid, [string[]]$initArgs) {
Write-Host " init $cid ..."
$cmdArgs = @("contract","invoke","--id",$cid,"--source",$IDENTITY,"--network",$NETWORK,"--","initialize") + $initArgs
$lines = & stellar @cmdArgs 2>&1
$lines | ForEach-Object { Write-Host " $_" }
if ($LASTEXITCODE -ne 0) {
Write-Warning "Initialization of contract $cid returned exit code $LASTEXITCODE"
}
}
# ---- PHASE 1: BUILD ALL ----
Write-Host "=== PHASE 1: BUILD ==="
$all = @("verifier","bn254_verifier","payment","reputation","insurance","consensus",
"hardware_attestation","dp_gate","model_provenance","carbon_credit",
"custody_handoff","fleet_identity","fleet_learning","causal_liability",
"emergent_safety","shapley_reward","task_auction")
foreach ($c in $all) { Build-If-Needed $c }
# ---- PHASE 2: DEPLOY ----
Write-Host "=== PHASE 2: DEPLOY ==="
# 1. verifier (uses BLS12-381 VerificationKey)
$VERIFIER_ID = Deploy-Plain "verifier"
# Alpha, Beta, Gamma, Delta, IC for BLS12-381 Verifier
$blsVk = '{\"alpha\":\"143b52860a4c74918dcfde51c2e25faf3f571f4d2033f84fda430a6eff2eafeca8e8e8b59f808d3072150b4a2a2947460742da8f80c2f11f7f42d42345403529ca8c15400f0f0beb9e95398ccd2348d489a7bed8033e4351907074e55b7fbbe7\", \"beta\":\"04757dcc295d994fd6298f93c0b0ae6c341386784f834d643e2a9039e81a304040fd167d42a4e5ee8a9249e839664ca70559b44588827eb07382ce45f3898628bcb66c4047eb994ee6d346f980470abbb67c4f5fdadcfe3a8ca9b34d78ed9053069b245ba39625566c6eb33d0b257f3ba47022ffe1f3324c5d81c68dd7602aef25ae41293171657ac39e614f8c77745d1677dbf53db34492717f98698351ce4110924ada8ecb4a1fd0df49bd2170a44ee94450ddfa8edf9e51a0420c5818ff6b\", \"gamma\":\"04757dcc295d994fd6298f93c0b0ae6c341386784f834d643e2a9039e81a304040fd167d42a4e5ee8a9249e839664ca70559b44588827eb07382ce45f3898628bcb66c4047eb994ee6d346f980470abbb67c4f5fdadcfe3a8ca9b34d78ed9053069b245ba39625566c6eb33d0b257f3ba47022ffe1f3324c5d81c68dd7602aef25ae41293171657ac39e614f8c77745d1677dbf53db34492717f98698351ce4110924ada8ecb4a1fd0df49bd2170a44ee94450ddfa8edf9e51a0420c5818ff6b\", \"delta\":\"04757dcc295d994fd6298f93c0b0ae6c341386784f834d643e2a9039e81a304040fd167d42a4e5ee8a9249e839664ca70559b44588827eb07382ce45f3898628bcb66c4047eb994ee6d346f980470abbb67c4f5fdadcfe3a8ca9b34d78ed9053069b245ba39625566c6eb33d0b257f3ba47022ffe1f3324c5d81c68dd7602aef25ae41293171657ac39e614f8c77745d1677dbf53db34492717f98698351ce4110924ada8ecb4a1fd0df49bd2170a44ee94450ddfa8edf9e51a0420c5818ff6b\", \"ic\":[\"16222d08d567e1699f4b5ccd117ee085383478a28be6b6f7d0e10cb9b925b0f3e3af084255f1135e5c1658a0ed9f55eb06284a8bba258959b632bdc16235fef50684fa1d7a9e390736d27310590789ebc98d936142825e82aa6ac1b2f7a43252\",\"12be116f7b3705d32cbea2ab8a664024cb1071ab5ed3305c9d84ba8c043896c818cfe8108a5e6235417102dd38429956192577f0c4bcc95fb3b64e040d2fc57014dcfa13ade58747f3990fcc1f10620443a556624bb77788cf3185c4c726726c\",\"14e50dc9c4068d3b6ec121f344ebd66f5b5f022bb6fdc05dc92ea6e56e9f88aa47a5cac227a330d8bdfafe4a231159cb128907903a63e5bc40fb1cdf120d09aa9bc36d3b24ac335f9635f47d80591bcf54d1e1a60033a7d51f130b7baeab7f45\",\"0902a42f3e66e25a1715dde3704a780fce368a29172036744c90ed97e61f82074c6333a1da2b574876f27eb154177ac116ed62a6b0fc4b54de024d0c8d5f477eaf8be038fea0b242832da537da3001a88565e0abc606850eec3cb111f96d656e\",\"10aad7084a89b2d81161954ceb4916e08fa1e0798e17a3bb293c5543c08fe7c298bde4cf34cbdcbe67473097d00a2113149e161e0e5856f45eba405a92e73530f3d27052ea5fba57175c563264cc6c885b987b4f0c8c064701a13b7032e76afe\",\"19a4604c424d1a7594e0dc3f9a1dfd93fc38ce0350551211bed6db65c8dc3045f9767f2083deffcf4e5e4beedb284b2717366df76b798b44e57d91433a86d77e80493c37e4a990055d8f1e4878c9acce3c89a3ae9a3c402693abaf8324dcbdfe\",\"0c7d2f9e68b7f1ebc382bc048c70fbe13c8e0c20c3da49172f1ec427749efc731a30a92a54802b5aacf91610d63dac2512d2e36db327ce685cd4c8d982fa997a6942c4d1bbb4beec1653cdec8df302b64782ba78a8e74dca0e35ae6a8eaf7551\"]}'
Call-Init $VERIFIER_ID @("--admin", $ADMIN, "--vk", $blsVk)
# 2. bn254_verifier with test gnark VK
$vkArg = '{\"alpha\":\"0cd3999668886312f04972e1f190946fd29f45dd8c0f0a9942a36ec877e3d11e00f1d0c8e206e05ac7ee14034a70dd77e2d2f54d62eca2c5cf254d291169c525\", ' +
'\"beta\":\"0d7d10870991b40f577e93e1e17f612c3a71cfc04b552a93c9eac05265c746482d18002f0d0b1d01f84a6b25d985503f29df7360f2b93b1eb42ba904be1e53201e676b66b098cd966f9ec555ffed5502d5c187c3604569f9128ffc8d5d2f48cf102818a548cef030c0ddea49baeb75b1a81f543f50acbcf4c8ba69efe0da26db\", ' +
'\"gamma\":\"1e2f99633d3ff1a7b0a3fdac448de7d0278eca2fc0ba925d6af47e0e416dfa7c124ea5f29caf1e200369ad85307282f484605f5f3bbc992d8c997cdf4dec9c4a0fa51bdbee42170ba324eeea79ffaed0f45b0995819c14be356793d9e57e3f9e176f50c08df05f73f24d6addf8d6e0661a4aca58622ac9ecfd8ef54264dcf4fd\", ' +
'\"delta\":\"1843504055be6faee5c0a71740cfa933cc7f6b0631c91d8e1fd8b48653b6eced2e61b28c136e4d56c8172accdb98b8dcf4f264cce5e68cde74782c2ac226337b0ddb655838fcc231132a44e9cdbd9e288566b62d20888ce215c36f44d2cd7bd8131b4296f7f25bf22d5d79319a99ece5a32c2dd5ea92d16013bfbd5800bf6a90\", ' +
'\"ic\":[\"290a92f9fae657d3a7662e3529fe4d5cd822cb6f3da5ea5346275564b588a44a17b34824116b4d3a63d836eceb653c9d37655e7f080e2d07efa1867e80dec266\",\"05fef241d02dd9f32905d833cd75363653c591a582ce810637caaf0c01cb68f0046743d89f70e5f2f4b80a1666b32869c85e121a1b5cf858ec738a970e9e5ecf\"]}'
Write-Host "Deploying bn254_verifier with gnark test VK..."
$BN254_ID = Deploy-Args "bn254_verifier" @("--admin", $ADMIN, "--verification_key", $vkArg)
# 3. fleet_identity
$FLEET_ID_ID = Deploy-Args "fleet_identity" @("--admin", $ADMIN, "--depth", "16")
# 4. insurance
$INSURANCE_ID = Deploy-Plain "insurance"
Call-Init $INSURANCE_ID @("--admin", $ADMIN)
# 5. reputation
$REPUTATION_ID = Deploy-Plain "reputation"
Call-Init $REPUTATION_ID @("--admin", $ADMIN, "--verifier_contract", $VERIFIER_ID)
# 6. consensus
$CONSENSUS_ID = Deploy-Plain "consensus"
Call-Init $CONSENSUS_ID @("--admin", $ADMIN, "--verifier", $VERIFIER_ID)
# 7. hardware_attestation
$HW_ID = Deploy-Plain "hardware_attestation"
Call-Init $HW_ID @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--min_confidence", "80")
# 8. dp_gate
$DP_ID = Deploy-Plain "dp_gate"
Call-Init $DP_ID @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--max_epsilon_milli", "100", "--min_confidence", "80")
# 9. model_provenance
$MODEL_ID = Deploy-Plain "model_provenance"
Call-Init $MODEL_ID @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--min_confidence", "80")
# 10. carbon_credit
$CARBON_ID = Deploy-Plain "carbon_credit"
Call-Init $CARBON_ID @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--energy_budget_milliwh", "1000000", "--min_confidence", "80")
# 11. custody_handoff
$CUSTODY_ID = Deploy-Plain "custody_handoff"
Call-Init $CUSTODY_ID @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--min_confidence", "80")
# 12. payment
$PAYMENT_ID = Deploy-Plain "payment"
Call-Init $PAYMENT_ID @("--admin", $ADMIN, "--verifier_contract", $VERIFIER_ID, "--xlm_token", $XLM)
# 13. causal_liability
$CAUSAL_ID = Deploy-Args "causal_liability" @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--bn254_verifier", $BN254_ID, "--min_confidence", "80")
# 14. emergent_safety
$EMERGENT_ID = Deploy-Args "emergent_safety" @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--bn254_verifier", $BN254_ID, "--min_confidence", "80")
# 15. shapley_reward
$SHAPLEY_ID = Deploy-Args "shapley_reward" @("--admin", $ADMIN, "--verifier", $VERIFIER_ID, "--bn254_verifier", $BN254_ID, "--min_confidence", "80", "--reward_token", $XLM)
# 16. task_auction
$AUCTION_ID = Deploy-Args "task_auction" @("--admin", $ADMIN, "--fleet_identity", $FLEET_ID_ID, "--bn254_verifier", $BN254_ID)
# 17. fleet_learning
$LEARNING_ID = Deploy-Args "fleet_learning" @("--admin", $ADMIN, "--verifier", $BN254_ID, "--reward_token", $XLM, "--reward_per_contributor", "10000000")
# ---- WRITE .env ----
$envOut = "STELLAR_NETWORK=$NETWORK`n" +
"STELLAR_HORIZON_URL=https://horizon-testnet.stellar.org`n" +
"ADMIN_ADDRESS=$ADMIN`n" +
"VERIFIER_CONTRACT_ID=$VERIFIER_ID`n" +
"BN254_VERIFIER_CONTRACT_ID=$BN254_ID`n" +
"FLEET_IDENTITY_CONTRACT_ID=$FLEET_ID_ID`n" +
"FLEET_LEARNING_CONTRACT_ID=$LEARNING_ID`n" +
"PAYMENT_CONTRACT_ID=$PAYMENT_ID`n" +
"REPUTATION_CONTRACT_ID=$REPUTATION_ID`n" +
"INSURANCE_CONTRACT_ID=$INSURANCE_ID`n" +
"CONSENSUS_CONTRACT_ID=$CONSENSUS_ID`n" +
"HARDWARE_ATTESTATION_CONTRACT_ID=$HW_ID`n" +
"DP_GATE_CONTRACT_ID=$DP_ID`n" +
"MODEL_PROVENANCE_CONTRACT_ID=$MODEL_ID`n" +
"CARBON_CREDIT_CONTRACT_ID=$CARBON_ID`n" +
"CUSTODY_HANDOFF_CONTRACT_ID=$CUSTODY_ID`n" +
"CAUSAL_LIABILITY_CONTRACT_ID=$CAUSAL_ID`n" +
"EMERGENT_SAFETY_CONTRACT_ID=$EMERGENT_ID`n" +
"SHAPLEY_REWARD_CONTRACT_ID=$SHAPLEY_ID`n" +
"TASK_AUCTION_CONTRACT_ID=$AUCTION_ID`n" +
"GUARDIAN_POLL_INTERVAL=5`n" +
"PAYMENT_CONFIDENCE_THRESHOLD=0.95`n" +
"ANOMALY_THRESHOLD=3`n"
$envOut | Set-Content ".env"
# ---- SUMMARY ----
Write-Host ""
Write-Host "=== DEPLOYMENT COMPLETE ON STELLAR $NETWORK ==="
Write-Host "Admin: $ADMIN"
Write-Host ""
@{
"verifier" = $VERIFIER_ID
"bn254_verifier" = $BN254_ID
"fleet_identity" = $FLEET_ID_ID
"fleet_learning" = $LEARNING_ID
"payment" = $PAYMENT_ID
"reputation" = $REPUTATION_ID
"insurance" = $INSURANCE_ID
"consensus" = $CONSENSUS_ID
"hardware_attestation" = $HW_ID
"dp_gate" = $DP_ID
"model_provenance" = $MODEL_ID
"carbon_credit" = $CARBON_ID
"custody_handoff" = $CUSTODY_ID
"causal_liability" = $CAUSAL_ID
"emergent_safety" = $EMERGENT_ID
"shapley_reward" = $SHAPLEY_ID
"task_auction" = $AUCTION_ID
}.GetEnumerator() | Sort-Object Name | ForEach-Object {
Write-Host (" {0,-25} {1}" -f $_.Key, $_.Value)
Write-Host (" https://stellar.expert/explorer/testnet/contract/{0}" -f $_.Value)
}
Write-Host ""
Write-Host "Saved to .env and $LOG"