05月20, 2018

Something About IOTA [01_Trit and Tryte]

IOTA以其独特的Tangle结构、免手续费等革命性设计在众多区块链设计中独树一帜。本篇做为IOTA系列文章的首篇,介绍了其基本单位Trit与Tryte的相关概念。

Trit and Tryte

Tryte是IOTA里的基本单位,无论是address、seed或是hashes都由Tryte构成。 Trit 是构成 Tryte 的基本单位,在Balance Trinary System(下称BTS)下,Trite 由-1,0,1构成。 1 Tryte = 3 Trits ,所以 1 Tryte 有 3 ^ 3 = 27种组合(类比1 byte = 8 bit,有 2 ^ 8 = 256种组合)。

Covert to Integer

位数从左至右计算: Trit a = -1,1,0 = -1 3^0 + 1 3^1 + 0 3^2 = 2 Trit b = 1,-1,1 = 1 3^0 + -1 3^1 + 1 3^2 = 7

Maximum Number

二进制 2bits 有 2 ^ 2 = 4 种组合方式,最大值为 2 ^ 2 -1 = 3 三进制 在BTS下 2Trits 有 3 ^ 2 = 9种组合方式,因为有-1的组合可能,故其值是围绕0值正负展开的,所以其最值为(3 ^ 2 - 1) / 2 = 4:

Max Value = (3 ^ n - 1) / 2 n为trits数

IOTA Tryte Alphabet

IOTA为了使trytes更容易阅读使用26个英文字符加数字9组成 IOTA Tryte Alphabet, 26 + 1 = 1 Tryte 的组合可能 = 27

Ternary Numeral System

在IOTA中,Ternary(Trinary) Numeral System 包含了上文提到的Balance Trinary System 还有 没有负值的 Unbalanced Ternary System(或称为base-3 numeral system由 0 ,1,2组成)。

Base-N Numeral System

将Base-N计数的值转为十进制计数时,最左侧数字是最显著数字,相对的最右侧数字是最不显著数字(因为位数计算从右至左减少)。

  • base-2 value to decimal 1101bin = 1 2 ^ 3 + 1 2 ^ 2 + 0 2 ^ 1 + 1 0 ^ 0 = 13dec 最左侧的1的因数2的位数最高故为最显著数字,最右侧数字相反。
  • base-3 value to decimal 2101ternary = 2 3 ^ 3 + 1 3 ^ 2 + 0 3 ^ 1 + 1 3 ^ 0 = 64dec

Decimal to Base-3

Decimal转Base-3计数:

e.g. convert 345 to decimal: 3(devisor) / 345(devidend) / 115 (quotation) alt

故 345dec = 110210ternary (base-10 -> base-3)

Base-3(unbalanced ternary value) to Base-3(balanced ternary value)

这两种三进制计数法的区别在于后者由-1构成的可能,所以在转换时,对于balanced ternary value而言最左侧的数字是最不显著数字(In a balanced value system the left most value is the least significant value)。转换时需要两个步骤:

  • 颠倒位数顺序
  • 最大值 + 1 : 在unbalanced ternary system中最大值是2,所以当遇到2时 + 1,当该位结果为3时将该位写作T并将后一位置 + 1。

e.g. convert 345dec to base-3 unbalanced value system

1、convert dec to base-3 balanced value system (详细步骤见上小节Decimal to Base-3)

2、反序结果位数

3、遇2写T并后续位数 + 1

base-10: 345 => base-3: 110210

Unbalanced ternary: 110210

Reverse the order: 012011

Balanced ternary: 01T111 <= Add a 1 for each trit value 2

base-10: 345 => balanced ternary: 01T111

4、如为负数则先去掉负号按以上步骤转换,将结果的每一个T与1互转:

a) Remove the minus sign and convert the decimal value 345 to a base-3 or unbalanced ternary value.

base-10: 345 => balanced ternary: 01T111

b) Swap 1 with T and T with 1

base-10: -345 => balanced ternary: 0T1TTT


参考:

  1. IOTA tutorial 2: Trit and Tryte

    alt

本文链接:https://check321.net/post/IOTA_01.html

-- EOF --