Skip to main content
net6.0

Package Description

Published
May 11, 2022
4y ago
Total Downloads
57.0K
57,035

Install

dotnet add package EdjCase.ICP.Candid --version 0.0.1-beta.1
ProductVersions
.NET
net6.0

README

ICP.NET

Collection of Internet Computer Protocol (ICP) libraries for .NET/Blazor

  • Agent - Library to allow communication to and from the Internet Computer

  • Candid - Library of Candid Encoding, Models and Helpers to work with

  • Samples - A few projects to demo the capabilities of the ICP libraries

Roadmap/TODO

  • Serialization for custom C# models
  • Automatic Api Client/Model generation from Candid spec
  • Infer type from value, vs specifying value + type

Agent

Usage

// Create identity
var identity = new AnonymousIdentity();

// Create http agent
IAgent agent = new HttpAgent(identity);

// Create Candid arg to send in request
CandidArg arg = CandidArg.FromCandid(
    CandidValueWithType.FromValueAndType( // WIP, will reduce redundancy
        CandidPrimitive.Nat64(1234),
        new PrimitiveCandidTypeDefinition(CandidPrimitiveType.Nat64)
    )
);

// Make request to IC
string method = "get_proposal_info";
Principal governanceCanisterId = Principal.FromText("rrkah-fqaaa-aaaaa-aaaaq-cai");
QueryResponse response = await agent.QueryAsync(governanceCanisterId, method, arg);

QueryReply reply = response.ThrowOrGetReply();

CandidArg responseArg = reply.Arg;
// Use response ...

Candid

Usage

Parsing bytes

CandidArg arg = CandidArg.FromBytes(rawCandidBytes);

Using candid values directly

CandidArg arg = CandidArg.FromBytes(rawCandidBytes);
CandidValue firstArg = arg.Values[0];
string title = firstArg.AsRecord()["title"];

Converting candid to custom classes (custom serialization is on the roadmap)

CandidArg arg = CandidArg.FromBytes(rawCandidBytes);
MyObj obj = arg.Values[0].Value.AsRecord(r => new MyObj
{
    Title = r["title"].AsText(),
    IsGoodTitle = r["is_good_title"].AsBool()
});

public class MyObj
{
    public string Title { get; set; }
    public bool IsGoodTitle { get; set; }
}

Links

Adoption Assessment

Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.

This version is marked prerelease. Validate its API and upgrade path before production use.No SPDX license expression is published. Review the license text and your organisation's policy before redistribution.Compatibility metadata lists 1 target framework; confirm the exact target used by your application.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.