我正在尝试使用 nodejs 和 @emurgo/cardano-serialization-lib-nodejs lib (CardanoWasm) 生成地址并创建事务。按照文档我正在尝试这个:
const rootkey = CardanoWasm.Bip32PrivateKey.from_bip39_entropy(
Buffer.from(someEntropy, 'hex'), // entropy is generated from mnemonic
Buffer.from('')
);
const account = rootkey
.derive(harden(1852)) // harden is a function returning 0x80000000+arg
.derive(harden(1815))
.derive(harden(0));
const utxokey = account
.derive(0)
.derive(0)
.to_public();
const stake1 = account
.derive(2)
.derive(0)
.to_public();
const address = CardanoWasm.BaseAddress.new(
CardanoWasm.NetworkInfo.mainnet().network_id(),
CardanoWasm.StakeCredential.from_keyhash(utxokey.to_raw_key().hash()),
CardanoWasm.StakeCredential.from_keyhash(stakekey.to_raw_key().hash())
);
const addressBech32 = address.to_address().to_bech32();
Run Code Online (Sandbox Code Playgroud)
因此,在我的示例中,addressBech32 是钱包的实际公共地址。当我通过助记符将钱包导入到guarda(例如)时,它工作正常。但究竟什么是 rootkey 和 account?在我的示例中,私钥和签名密钥是什么?我应该使用什么密钥来签署交易以及如何使用 Cardano wasm 获取该密钥?我应该使用什么私钥来导入钱包(如果我出于某种原因不想使用助记符)?
我在一个较大的程序中一直遇到这个问题,所以我制作了一个新的ada程序来对其进行测试,结果也是如此。
我有一个文本文件(Unix行尾):
000_1000_0010_1001
100_0000_0010_1001
100_1000_0000_1001
100_1000_0010_0001
100_1000_0010_1001
000_0000_0011_0011
100_1000_0100
000_0000_0110
111_1111_1111
011_1111_1111
000_0000_0110
Run Code Online (Sandbox Code Playgroud)
我要使用的方法很简单,将每行放入一个字符串中,然后直接将其打印出来。
这是我的代码:
000_1000_0010_1001
100_0000_0010_1001
100_1000_0000_1001
100_1000_0010_0001
100_1000_0010_1001
000_0000_0011_0011
100_1000_0100
000_0000_0110
111_1111_1111
011_1111_1111
000_0000_0110
Run Code Online (Sandbox Code Playgroud)
容易吧?它使用get_line接收每一行,将其保存到“ input”变量中,然后打印出所读取的任何量(使用get_line()返回的长度)。
不幸的是,当我运行以下代码时,我得到了一堆空白行:
gnatmake read read.adb
read < input.txt
Run Code Online (Sandbox Code Playgroud)
000_1000_0010_1001
100_0000_0010_1001
100_1000_0000_1001
100_1000_0010_0001
100_1000_0010_1001
000_0000_0011_0011
100_1000_0100
000_0000_0110
111_1111_1111
011_1111_1111
000_0000_0110
Run Code Online (Sandbox Code Playgroud)
我仔细检查了一下,确保我的输入文件中没有任何怪异的行尾字符或类似的字符(我只是在vim中输入了它们)。
这弄乱了我的程序,因为我必须考虑这些错误的空行。
知道我在做什么错吗?
我仍然对 avar : Integer;和之间的区别感到困惑var : aliased Integer;。根据 wikibooks,“如果你想访问任何变量,你需要告诉编译器该变量需要在内存中并且不能驻留在寄存器中”。寄存器内存不也是吗?所以一直困扰我的真正问题是存储在哪里var : Integer;以及var : aliased Integer;存储在哪里。
Ada'accept start do'中的任务是否未完成其所有执行?
接受开始做
这里'do'关键字强制编译器完成do和end关键字之间的所有执行提及但为什么在下面的代码中它不会发生?为什么它打印其他任务主体即第一个(任务名称)而不是它自己的任务(即启动)下面的代码?请帮我理解我哪里出错了?
procedure main is
task first is
entry start;
end first;
task body first is
begin
accept start ; -- i am not using do here
put_line("first");
put_line("first");
put_line("first");
end first;
task second is
entry start;
end second;
task body second is
begin
accept start do -- here 'do' keyword will force compile to finish all the execution between keyword 'do' and end? but why it is mixing statement of task first?
for i in 1..10 …Run Code Online (Sandbox Code Playgroud) 该手册内容如下:
检查子程序主体的顺序。如果字母-在出现在-gnaty之后的字符串中,则给定范围内的所有子程序主体(例如,程序包主体)必须按字母顺序排列。排序规则使用普通的Ada规则比较字符串,而忽略字母的大小写,除非存在尾随的数字后缀,然后在排序中使用此后缀的值(例如Junk2在Junk10之前)。
我认为,Junk2未来的Junk10是一个奇怪的,否则执法作风的实际灵感。但是实际触发它的一些代码示例是什么?我无法使用此选项来抱怨函数定义或任务主体混乱。例如,使用编译以下内容时,我没有任何抱怨gnat make -gnatyo:
procedure Disordered is
function Test return Natural;
function Zest return Natural;
-- disordered function bodies
function Zest return Natural is (1);
function Test return Natural is (2);
begin
null;
end Disordered;
Run Code Online (Sandbox Code Playgroud) 我的问题很简单,就像谷歌让我失望一样.如何将无界字符串转换为整数?
如果字符串有界,我可以这样做: I : Integer := Integer'Value("613");
但是,我的字符串无限制,Ada抛出此错误:
expected type "Standard.String"
found private type "Ada.Strings.Unbounded.Unbounded_String"
我想做什么?
我在大学读Ada.今天我的教授向我们提出了一个问题.在下面的代码中有三种类型声明.第三个没有编译错误'缺少新'.
我假设'Type'关键字让编译器知道我们要定义一个存储类,所以我的问题是:
声明之间的语义差异是什么?
如果省略关键字Integer,Ada会在指定范围时采用通用整数类型吗?这似乎是一个明显而合乎逻辑的结果.此外,当关键字'Integer'在'range'之前是新的然后是必需的?
我希望这不是模棱两可的,我做了一些研究,但似乎无法找到一个确切的答案,或者我可能与Ada的新手很多,以了解我发现了什么.我真的很想了解下面发生的事情.
with Ada.Text_IO; use ada.Text_IO;
procedure any is
type abc is new Integer range 1..10;
num : abc;
type def is range 1..10;
num2 : def;
type xyz is Integer range 1..10;
num3 : xyz;
begin
num := 5;
num2 := 6;
num3 := 7;
end any;
Run Code Online (Sandbox Code Playgroud) 我试图初始化一个记录变量,它本身包含一个使用聚合的嵌套记录,但似乎无法使语法正确.任何帮助赞赏.
with Step; use Step;
package Pattern is
-- ADT
type Pattern_Type is tagged private;
-- ADT components
type Bars_Type is private;
-- ADT instance methods
function Tempo (This: Pattern_Type) return Integer;
function Bars (This: Pattern_Type) return Bars_Type;
function Get_Next_Step(This: Pattern_Type ) return Step_Type;
-- Static methods
function Get_Basic_Beat return Pattern_Type;
private
type Bars_Type is range 0..2;
Number_Of_Steps : constant Natural := 32;
type Active_Step_Type is mod Number_Of_Steps;
type Steps_Type is array( Active_Step_Type ) of Step_Type;
type Pattern_Type is tagged …Run Code Online (Sandbox Code Playgroud) 正是标题所要求的。我正在浏览一些Ada代码并遇到
generic type X is (<>);
Run Code Online (Sandbox Code Playgroud)
这是什么意思?它类似于C ++模板参数吗?
我已经为所有记录类型添加了表示形式(rep)子句,这些子句将通过消息发送到另一个处理器。它是不同的CPU制造商,编译器和编程语言,因此存在未对齐/错误解释的危险。
显然,对于每个字段都type XXX is record需要for XXX use具有适当的字节和位数据。
那type null_record is null record;呢
for null_record use
null;
end record;
Run Code Online (Sandbox Code Playgroud)
不会编译,而且似乎没有任何意义。
老板正在推动100%代表条款,有'size,'alignment 'Object_size,Value_size和pragma pack,但肯定是没有意义的空记录?