Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions ant-dev/src/ant_dev/cmd_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,7 @@ def run(args) -> None:
evm = manifest["evm"]
antd_env["EVM_RPC_URL"] = evm.get("rpc_url", "")
antd_env["EVM_PAYMENT_TOKEN_ADDRESS"] = evm.get("payment_token_address", "")
antd_env["EVM_DATA_PAYMENTS_ADDRESS"] = evm.get("data_payments_address", "")
if evm.get("merkle_payments_address"):
antd_env["EVM_MERKLE_PAYMENTS_ADDRESS"] = evm["merkle_payments_address"]
antd_env["EVM_PAYMENT_VAULT_ADDRESS"] = evm.get("payment_vault_address", evm.get("data_payments_address", ""))

antd_cmd = ["cargo", "run", "--", "--network", "local"]
antd_proc = start_process(antd_cmd, cwd=antd_dir, env=antd_env, log_file=LOG_FILE)
Expand Down
17 changes: 0 additions & 17 deletions antd-cpp/include/antd/async_client.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,23 +65,6 @@ class AsyncClient {
/// Retrieve a chunk by address.
std::future<std::vector<uint8_t>> chunk_get(std::string address);

// --- Graph Entries (DAG Nodes) ---

/// Create a new graph entry.
std::future<PutResult> graph_entry_put(std::string owner_secret_key,
std::vector<std::string> parents,
std::string content,
std::vector<GraphDescendant> descendants);

/// Retrieve a graph entry by address.
std::future<GraphEntry> graph_entry_get(std::string address);

/// Check if a graph entry exists at the given address.
std::future<bool> graph_entry_exists(std::string address);

/// Estimate the cost of creating a graph entry.
std::future<std::string> graph_entry_cost(std::string public_key);

// --- Files & Directories ---

/// Upload a local file to the network.
Expand Down
3 changes: 1 addition & 2 deletions antd-cpp/include/antd/models.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,16 +57,15 @@ struct PrepareUploadResult {

// Wave-batch fields (present when payment_type == "wave_batch")
std::vector<PaymentInfo> payments; // per-quote payments for payForQuotes()
std::string data_payments_address; // wave-batch contract address

// Merkle fields (present when payment_type == "merkle")
int depth{0}; // merkle tree depth (1-8)
std::vector<PoolCommitmentEntry> pool_commitments; // for payForMerkleTree()
uint64_t merkle_payment_timestamp{0}; // unix seconds
std::string merkle_payments_address; // merkle vault contract

// Common fields (always present)
std::string total_amount;
std::string payment_vault_address; // unified payment vault contract address
std::string payment_token_address; // token contract address
std::string rpc_url; // EVM RPC URL
};
Expand Down
37 changes: 0 additions & 37 deletions antd-cpp/src/async_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,43 +74,6 @@ std::future<std::vector<uint8_t>> AsyncClient::chunk_get(std::string address) {
});
}

// ---------------------------------------------------------------------------
// Graph Entries (DAG Nodes)
// ---------------------------------------------------------------------------

std::future<PutResult> AsyncClient::graph_entry_put(
std::string owner_secret_key,
std::vector<std::string> parents,
std::string content,
std::vector<GraphDescendant> descendants) {
return std::async(std::launch::async,
[this,
osk = std::move(owner_secret_key),
p = std::move(parents),
c = std::move(content),
d = std::move(descendants)] {
return client_.graph_entry_put(osk, p, c, d);
});
}

std::future<GraphEntry> AsyncClient::graph_entry_get(std::string address) {
return std::async(std::launch::async, [this, addr = std::move(address)] {
return client_.graph_entry_get(addr);
});
}

std::future<bool> AsyncClient::graph_entry_exists(std::string address) {
return std::async(std::launch::async, [this, addr = std::move(address)] {
return client_.graph_entry_exists(addr);
});
}

std::future<std::string> AsyncClient::graph_entry_cost(std::string public_key) {
return std::async(std::launch::async, [this, pk = std::move(public_key)] {
return client_.graph_entry_cost(pk);
});
}

// ---------------------------------------------------------------------------
// Files & Directories
// ---------------------------------------------------------------------------
Expand Down
3 changes: 1 addition & 2 deletions antd-cpp/src/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ static PrepareUploadResult parse_prepare_response(const json& j) {
result.upload_id = j.value("upload_id", "");
result.payment_type = j.value("payment_type", "");
result.total_amount = j.value("total_amount", "");
result.data_payments_address = j.value("data_payments_address", "");
result.payment_vault_address = j.value("payment_vault_address", "");
result.payment_token_address = j.value("payment_token_address", "");
result.rpc_url = j.value("rpc_url", "");

Expand All @@ -294,7 +294,6 @@ static PrepareUploadResult parse_prepare_response(const json& j) {
if (result.payment_type == "merkle") {
result.depth = j.value("depth", 0);
result.merkle_payment_timestamp = j.value("merkle_payment_timestamp", uint64_t{0});
result.merkle_payments_address = j.value("merkle_payments_address", "");

if (j.contains("pool_commitments") && j["pool_commitments"].is_array()) {
for (const auto& pc : j["pool_commitments"]) {
Expand Down
69 changes: 0 additions & 69 deletions antd-cpp/src/grpc_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,75 +172,6 @@ std::vector<uint8_t> GrpcClient::chunk_get(std::string_view address) {
return std::vector<uint8_t>(d.begin(), d.end());
}

// ---------------------------------------------------------------------------
// Graph Entries (DAG Nodes)
// ---------------------------------------------------------------------------

PutResult GrpcClient::graph_entry_put(std::string_view owner_secret_key,
const std::vector<std::string>& parents,
std::string_view content,
const std::vector<GraphDescendant>& descendants) {
grpc::ClientContext ctx;
antd::v1::PutGraphEntryRequest req;
req.set_owner_secret_key(std::string(owner_secret_key));
for (const auto& p : parents) {
req.add_parents(p);
}
req.set_content(std::string(content));
for (const auto& d : descendants) {
auto* desc = req.add_descendants();
desc->set_public_key(d.public_key);
desc->set_content(d.content);
}
antd::v1::PutGraphEntryResponse resp;
check_status(impl_->graph_stub->Put(&ctx, req, &resp));
return PutResult{
.cost = resp.cost().atto_tokens(),
.address = resp.address(),
};
}

GraphEntry GrpcClient::graph_entry_get(std::string_view address) {
grpc::ClientContext ctx;
antd::v1::GetGraphEntryRequest req;
req.set_address(std::string(address));
antd::v1::GetGraphEntryResponse resp;
check_status(impl_->graph_stub->Get(&ctx, req, &resp));

GraphEntry entry;
entry.owner = resp.owner();
entry.content = resp.content();
for (int i = 0; i < resp.parents_size(); ++i) {
entry.parents.push_back(resp.parents(i));
}
for (int i = 0; i < resp.descendants_size(); ++i) {
const auto& d = resp.descendants(i);
entry.descendants.push_back(GraphDescendant{
.public_key = d.public_key(),
.content = d.content(),
});
}
return entry;
}

bool GrpcClient::graph_entry_exists(std::string_view address) {
grpc::ClientContext ctx;
antd::v1::CheckGraphEntryRequest req;
req.set_address(std::string(address));
antd::v1::GraphExistsResponse resp;
check_status(impl_->graph_stub->CheckExistence(&ctx, req, &resp));
return resp.exists();
}

std::string GrpcClient::graph_entry_cost(std::string_view public_key) {
grpc::ClientContext ctx;
antd::v1::GraphEntryCostRequest req;
req.set_public_key(std::string(public_key));
antd::v1::Cost resp;
check_status(impl_->graph_stub->GetCost(&ctx, req, &resp));
return resp.atto_tokens();
}

// ---------------------------------------------------------------------------
// Files & Directories
// ---------------------------------------------------------------------------
Expand Down
43 changes: 6 additions & 37 deletions antd-cpp/tests/test_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,35 +101,6 @@ TEST_CASE("PutResult from JSON") {
CHECK(r.address == "abc123");
}

TEST_CASE("GraphEntry from JSON") {
auto j = json::parse(R"({
"owner":"owner1",
"parents":["p1","p2"],
"content":"abc",
"descendants":[{"public_key":"pk1","content":"desc1"}]
})");

antd::GraphEntry entry;
entry.owner = j.value("owner", "");
entry.content = j.value("content", "");
for (const auto& p : j["parents"]) {
entry.parents.push_back(p.get<std::string>());
}
for (const auto& d : j["descendants"]) {
entry.descendants.push_back(antd::GraphDescendant{
d.value("public_key", ""),
d.value("content", ""),
});
}

CHECK(entry.owner == "owner1");
CHECK(entry.parents.size() == 2);
CHECK(entry.parents[0] == "p1");
CHECK(entry.content == "abc");
CHECK(entry.descendants.size() == 1);
CHECK(entry.descendants[0].public_key == "pk1");
}

// ---------------------------------------------------------------------------
// PrepareUploadResult: merkle payment parsing
// ---------------------------------------------------------------------------
Expand All @@ -140,8 +111,8 @@ TEST_CASE("PrepareUploadResult merkle from JSON") {
"payment_type": "merkle",
"depth": 5,
"merkle_payment_timestamp": 1712150400,
"merkle_payments_address": "0xmerkle",
"total_amount": "0",
"payment_vault_address": "0xvault",
"payment_token_address": "0xtoken",
"rpc_url": "http://rpc.example.com",
"pool_commitments": [
Expand All @@ -160,7 +131,7 @@ TEST_CASE("PrepareUploadResult merkle from JSON") {
r.upload_id = j.value("upload_id", "");
r.payment_type = j.value("payment_type", "");
r.total_amount = j.value("total_amount", "");
r.data_payments_address = j.value("data_payments_address", "");
r.payment_vault_address = j.value("payment_vault_address", "");
r.payment_token_address = j.value("payment_token_address", "");
r.rpc_url = j.value("rpc_url", "");

Expand All @@ -183,7 +154,6 @@ TEST_CASE("PrepareUploadResult merkle from JSON") {
if (r.payment_type == "merkle") {
r.depth = j.value("depth", 0);
r.merkle_payment_timestamp = j.value("merkle_payment_timestamp", uint64_t{0});
r.merkle_payments_address = j.value("merkle_payments_address", "");

if (j.contains("pool_commitments") && j["pool_commitments"].is_array()) {
for (const auto& pc : j["pool_commitments"]) {
Expand All @@ -209,8 +179,8 @@ TEST_CASE("PrepareUploadResult merkle from JSON") {
CHECK(r.payment_type == "merkle");
CHECK(r.depth == 5);
CHECK(r.merkle_payment_timestamp == 1712150400);
CHECK(r.merkle_payments_address == "0xmerkle");
CHECK(r.total_amount == "0");
CHECK(r.payment_vault_address == "0xvault");
CHECK(r.payment_token_address == "0xtoken");
CHECK(r.rpc_url == "http://rpc.example.com");
CHECK(r.payments.empty());
Expand Down Expand Up @@ -258,7 +228,7 @@ TEST_CASE("PrepareUploadResult backward compat - no payment_type defaults to wav
auto j = json::parse(R"({
"upload_id": "up_old",
"total_amount": "5000",
"data_payments_address": "0xdp",
"payment_vault_address": "0xvault",
"payment_token_address": "0xtoken",
"rpc_url": "http://rpc.old.com",
"payments": [
Expand All @@ -271,7 +241,7 @@ TEST_CASE("PrepareUploadResult backward compat - no payment_type defaults to wav
r.upload_id = j.value("upload_id", "");
r.payment_type = j.value("payment_type", "");
r.total_amount = j.value("total_amount", "");
r.data_payments_address = j.value("data_payments_address", "");
r.payment_vault_address = j.value("payment_vault_address", "");
r.payment_token_address = j.value("payment_token_address", "");
r.rpc_url = j.value("rpc_url", "");

Expand All @@ -294,15 +264,14 @@ TEST_CASE("PrepareUploadResult backward compat - no payment_type defaults to wav
CHECK(r.payment_type == "wave_batch");
CHECK(r.upload_id == "up_old");
CHECK(r.total_amount == "5000");
CHECK(r.data_payments_address == "0xdp");
CHECK(r.payment_vault_address == "0xvault");
REQUIRE(r.payments.size() == 2);
CHECK(r.payments[0].quote_hash == "qh1");
CHECK(r.payments[1].quote_hash == "qh2");

// Merkle fields should be at defaults
CHECK(r.depth == 0);
CHECK(r.merkle_payment_timestamp == 0);
CHECK(r.merkle_payments_address.empty());
CHECK(r.pool_commitments.empty());
}

Expand Down
31 changes: 0 additions & 31 deletions antd-cpp/tests/test_grpc_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,37 +183,6 @@ TEST_CASE("PutResult from gRPC chunk put response") {
CHECK(r.address == "chunk1");
}

TEST_CASE("GraphEntry from gRPC response fields") {
// Simulates parsing a GetGraphEntryResponse
antd::GraphEntry entry;
entry.owner = "owner1";
entry.content = "abc";
entry.parents = {}; // empty parents list
entry.descendants.push_back(antd::GraphDescendant{
.public_key = "pk1",
.content = "desc1",
});

CHECK(entry.owner == "owner1");
CHECK(entry.content == "abc");
CHECK(entry.parents.empty());
CHECK(entry.descendants.size() == 1);
CHECK(entry.descendants[0].public_key == "pk1");
CHECK(entry.descendants[0].content == "desc1");
}

TEST_CASE("GraphEntry with parents from gRPC response") {
antd::GraphEntry entry;
entry.owner = "owner1";
entry.content = "abc";
entry.parents = {"p1", "p2"};
entry.descendants = {};

CHECK(entry.parents.size() == 2);
CHECK(entry.parents[0] == "p1");
CHECK(entry.parents[1] == "p2");
}

TEST_CASE("PutResult from gRPC graph entry put response") {
antd::PutResult r;
r.cost = "500";
Expand Down
11 changes: 4 additions & 7 deletions antd-csharp/Antd.Sdk.Tests/UnitTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ public async Task PrepareUploadAsync_ReturnsPrepareResult()
new { quote_hash = "qh1", rewards_address = "ra1", amount = "100" }
},
total_amount = "100",
data_payments_address = "dpa1",
payment_vault_address = "pva1",
payment_token_address = "pta1",
rpc_url = "https://rpc.example.com"
});
Expand Down Expand Up @@ -452,7 +452,7 @@ public async Task PrepareUploadAsync_Merkle_ReturnsPoolCommitments()
upload_id = "up_merkle_1",
payments = Array.Empty<object>(),
total_amount = "500",
data_payments_address = "dpa_m",
payment_vault_address = "pva_m",
payment_token_address = "pta_m",
rpc_url = "https://rpc.example.com",
payment_type = "merkle_batch",
Expand All @@ -469,8 +469,7 @@ public async Task PrepareUploadAsync_Merkle_ReturnsPoolCommitments()
}
}
},
merkle_payment_timestamp = 1700000000L,
merkle_payments_address = "mpa_1"
merkle_payment_timestamp = 1700000000L
});
_server.Start();

Expand All @@ -488,7 +487,6 @@ public async Task PrepareUploadAsync_Merkle_ReturnsPoolCommitments()
Assert.Equal("ra_2", result.PoolCommitments[0].Candidates[1].RewardsAddress);
Assert.Equal("300", result.PoolCommitments[0].Candidates[1].Amount);
Assert.Equal(1700000000L, result.MerklePaymentTimestamp);
Assert.Equal("mpa_1", result.MerklePaymentsAddress);
Assert.Equal("500", result.TotalAmount);
Assert.Empty(result.Payments);
}
Expand Down Expand Up @@ -521,7 +519,7 @@ public async Task PrepareUploadAsync_BackwardCompat_DefaultsPaymentType()
new { quote_hash = "qh1", rewards_address = "ra1", amount = "100" }
},
total_amount = "100",
data_payments_address = "dpa1",
payment_vault_address = "pva1",
payment_token_address = "pta1",
rpc_url = "https://rpc.example.com"
});
Expand All @@ -534,7 +532,6 @@ public async Task PrepareUploadAsync_BackwardCompat_DefaultsPaymentType()
Assert.Null(result.Depth);
Assert.Null(result.PoolCommitments);
Assert.Null(result.MerklePaymentTimestamp);
Assert.Null(result.MerklePaymentsAddress);
Assert.Single(result.Payments);
Assert.Equal("qh1", result.Payments[0].QuoteHash);
}
Expand Down
Loading
Loading