Spaces:
Sleeping
Sleeping
salma
feat: Stellar Testnet deployment configurations, automated deploy script, and testnet contract addresses
58fbf9f | $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" | |