解决方案  >   存储于区块链的可信任时间戳服务(EMCTTS)

崛起币Emercoin所支持的NVS (域名值存储)和DNS

  请注意,此文件可能会随时更新,特别是有关Emercoin版本0.3.0发布的内容。

  从Emercoin核心钱包客户端0.3.0版本开始,Emercoin提供了一种新服务:在其区块链中存储字段名称 - >值(name->value)——域名值。最初的想法来自于NameCoin。然而,NameCoin主要侧重于在其域名扩展上支持分布式网域 *.bit,而Emercoin提供了存储和维护字段名称- >值(域名值)的通用服务,无需进行更细专业化处理。当然,Emercoin也支持分布式备用DNS服务。此外,每个Emercoin钱包均内置了简单的DNS服务器,支持标准RFC1034 UDP DNS协议。

通用性对比

  在众多加密数字货币中,只有两种加密数字货币宣布支持在其区块链中存储其它数据。毫无疑问,它们就是NameCoin和Emercoin。这两种加密货币的其它数据采用了相同的组织方式,下面列出Namecoin和Emercoin的相似和不同之处:

  • 字段名称 – 存储数据的检索键(标签)

  • 值 – 数据本身

  以下是字段名称子系统的简单对比:

加密数字货币名称NameCoin - 域名币Emercoin - 崛起币
挖矿类型PoWPoS/PoW
MAX_NAME_LENGTH - 字段最大长度255512
MAX_VALUE_LENGTH - 字段值最大长度102320*1024
Lease time - 存储时间~200 天变量*
Create - 创建费用0.010.17*
Update - 更新费用0.000.12*
Delete - 删除费用N/A0.00
* Price is variable, and computed by formula:
p = sqrt(0.01 * R * y) + s / 128
  Where:
    R = Current Proof-of-work reward, in cents.
    y = Lease time, in years. Available by 1 day fractions.
	The cost of creating a new name is equal to the cost of a 1 year lease.
    s = key_size + value_size, in bytes. Division is integer, so for 
        entries, less than 128 bytes, this price part is zero.

For example, 9/30/2014 PoW reward was 140EMC, or 14000EMC cents (EMc).
If you want to lease name (length 100 bytes) for 1 year, you pay:

p = sqrt(0.01 * 14000 * (1[create new name] + 1[one year lease])) + (floor)(100 / 128) = 17EMc = 0.17EMC.

  所有手续服务费会被“烧光”(交易费的收入小于支出)

  Emercoin为字段值分配了20kB,足以满足多数现代加密应用的公钥使用。我们认为加密数字货币的区块链是发布和维护多数加密应用(如SSH/SSL证书)公钥的可靠保证。像常见支付交易一样,所存储的“字段名从->值数据对”也可在区块生产期间获得确认,而且基本上可在中间人攻击中免遭修改。

  因此区块链是免遭未经授权修改的可信任数据存储区,它是部署加密公开密钥基础设施(PKI)、所有权证明时间戳或其它分布式服务的强大基础。

管理字段名(域名值)— Managing Names

  Emercoin的区块链允许存储任何格式的“名称->值对”(域名值),但出于标准化的目的,我们建议采用一下格式存储:

service_abbr:unique_keyFor example:
dns:emercoin.com

  所有DNS记录必须是小写字母!!

  每一个“名称->值对”(域名值)都只属于一个所有者,每个所有者都被指定了一个单独的Emercoin钱包地址。只有该钱包地址的拥有者(拥有私钥)才能更改或删除域名值,或者将该域名值转移给他人(其他EMC钱包地址)。当一个新的域名值被创建时,一个匹配该域名值的新EMC钱包地址也同时被创建在本地Emercoin钱包。

  为了使域名值服务更清晰明确,建议使用以下缩写:

服务类型缩写服务类型说明
dns*内置于Emercoin区块链的DNS记录
sshSSH 公钥
gpgGNU PGP 公钥
kxRFC2230 公钥
sslSSL 证书
blsBLS 数字签名公钥
tts
可信任的时间戳
swiftSWIFT交易的银行分支信息
dpo数字化的所有权证明
magnet**种子文件magnet链接 - BitTorrent magnet links

  * 这是使用Emercoin DNS服务的特定缩写。

  ** 为存储 BitTorrent magnet 种子链接提供的服务,有助于文件分享。推荐格式:

  "name" : "magnet:Emercoin 0.3.2 for Linux - packed as tar.gz, original file from emercoin.com", 

  "value" : "magnet:?xt=urn:btih:dff183bcac72a628fcac88ac1c85c239b806fd5e&dn=emercoin-0.3.2-linux.tar.gz"

  你可在通用的DNS记录类型中,发现适合您应用的其他服务类型缩写。

  字段名(域名值)管理可以在Emercoin核心钱包客户端的控制台使用,或集成到JSON API中。Emercoin的开发是受到Namecoin(域名币)API的启发,但功能有很大不同,下面是操作清单和参数(方框[]内的为可选项)。

  • name_new <name> <value> <days>
    操作者创建一个“字段名->值对”(域名值),并且发布到区块链。第三方参数<天数>指的是域名值的有效期限。

  • name_update &ltlt;name> <value> <days> [<toaddress>]
    该操作表明:

  •     更新一个已存在的域名值

  •     增加有效期限(天数)

  •     转移该域名值的归属(转让、出售域名)

  • name_delete <name>
    该操作将从区块链中删除字段名->值对(域名值),并且不会返还该域名值未到期的费用。

  • name_show <name>*
    该操作将检索一个域字段名->值对(域名值),以及特定字段名的交易信息。

  • name_list [<name>]*
    该操作将列出当前钱包所有匹配的值对(域名值),以及这些域名值过往的交易记录。如果没指定<name>域名值,将列出所有域名值的信息。

  • name_scan [<start-name>] [<max-returned>]*
    该操作列出了区块链中所有现有字段名->值对(域名值)的信息。参数<start-name>为跳过列表中存在于指定字段的所有域名值,有利于对从区块中下载列表数据。

  • sendtoname <name> <amount> [comment] [comment-to]*
    支付到指定域名值所关联的钱包地址。金额在最小单位内(分:小数点后8位)四舍五入。<comment>和<comment-to>将被存储于本地钱包,而不是整个区块链。例如:通过此操作,可以支付一笔捐赠到Emercoin支持的公益科学运算组织 folding@homeproject。

  • name_filter [regexp] [<maxage=36000> [from=0] [nb=0] [stat]
    没有执行,返回一个空的列表结果。

  * 参数和行为与namecoin(域名币)相同。

  要为付款地址创建别名,只需要创建一对独特的名字和任意的“值”。一个新的钱包地址将在您的钱包内自动创建。建议您写一个文字描述作为“值”,只要该“值”注册到区块链后,所有支付到该“值”的款项将被发送到相对应的钱包地址。

Example:
Name="folding@home"
Value="Donation to support participants of folding@home project from Stanford University"

DNS 子系统

  如上所述,Emercoin能够将诸如DNS记录等特殊的“字段名->值对”(域名值)存储到其区块链上。由于区块链去中心的特性,这些记录是完全分布式的,不接受其他权力机构或个人审查、更改和撤销操作记录,并且是即刻生效的,只有这些记录的所有者才可以修改,或是将其转让到其他钱包地址。记录的所有者是钱包私钥指定的。

  从技术上讲,Emercoin的DNS支持所有的DNS域,但是,由于需要无缝衔接并集成到标准的DNS树,以防止其同现有DNS域冲撞,我们目前建议只在域中创建Emercoin DNS记录,即后缀为 *.emc / *.coin / *.lib / *.bazar 的域名。

  这些DNS记录通过上述 JSON RPC API,或通过标准的DNS协议 RFC1034,可以很轻松的在任意Emercoin核心钱包客户端中恢复。

  要激活DNS子系统,你可在配置文件 emercoin.conf  中指定2个可选参数:emcdns 和 emcdnsport

emcdns=1 # Run DNS server. Default is 0 (don't run)
emcdnsport=NNN # Port for DNS, default is 5335

OpenNIC 运行节点

  Emercoin已经与非盈利DNS免费提供机构OpenNIC达成合作,OpenNIC在DNS服务器中布置了Emercoin的节点,这将允许Emercoin区块链中的域名同OpenNIC的DNS服务器建立了对等协议,即Emercoin域名将通过更改本机DNS的方式到离您最近的OpenNIC服务器进行访问。

  用一句话说明:允许使用OpenNIC免费提供的DNS用户直接访问Emercoin区块链中的 *.emc、*.coin、*.lib 和 *.bazar域名。

  要更改本机DNS为OpenNIC的DNS,可根据OpenNICProject.Org网站上的设置向导进行设置。这是访问Emercoin DNS域的最简单方法。

集成到常规的DNS树

  集成Emercoin DNS服务到一个常规的DNS树,您就可以使用DNS的全面服务,或建立DNS缓存信息。标准的Windows DNS客户端无法执行这项工作,所以你应该使用一个额外的DNS代理服务器来做到这一点。下面我们将展示的一些例子。

个人电脑(Single PC),Acrylic DNS 代理服务器( Acrylic DNS proxy)

  在个人电脑上运行Emercoin核心钱包客户端,并运行其他程序,这是最常见的情况,为此,我们建议您安装轻量级的 Acrylic DNS 代理服务器(Acrylic DNS proxy)程序到您的电脑。由于集成了域名值,Acrylic DNS 代理服务器将在本地缓存中解析DNS请求,解析速度会更快捷,减少了浏览器延迟率,改善了您的网络性能。

  为了在Windows系统中安装和完成初始配置,请参阅Acrylic网站的向导说明。安装完成后,您应该配置Acrylic到集成的Emercoin域名域中。网络上有现成的配置文件例子。要配置成功,您需要将所有域名解析到Emercoin域(*.emc,*.coin, *.lib, *.bazar)的请求,转向到本地Emercoin核心客户端钱包,而所有解析到其他域的请求转向到默认的DNS提供商。Acrylic配置文件的配置如下:

; Forward to primary (default) DNS server anything but EMC-zones
PrimaryServerHostNameAffinityMask=^*.emc;^*.coin;^*.lib;^*.bazar;*
PrimaryServerAddress=DNS_of_your_provider or any public DNS, for example: 8.8.4.4
PrimaryServerPort=53

; Forward to EMC wallet requests for EMC-zones only
SecondaryServerHostNameAffinityMask=*.emc;*.coin;*.lib;*.bazar
SecondaryServerAddress=127.0.0.1
SecondaryServerPort=5335

  或者,你可以下载这个文件“AcrylicConfiguration.ini”,预配置使用OpenDNS作为首要和次要DNS提供商(标准DNS树),本地Emercoin核心客户端钱包作为第三DNS提供商,以解析 *.emc, *.coin, *.lib, *.bazar 域名。

  默认到该文件的路径为:C:\Program Files (x86)\Acrylic DNS Proxy\

  Emercoin团队也提供 Acrylic 文件包 下载,同样为使用Emercoin DNS做了预配置。

个人电脑(Single PC),BIND DNS代理(BIND DNS proxy)

  为了代替安装DNS代理服务器,您还必须选择安装一个完整的DNS服务器。幸运的是,完整的DNS服务器“BIND”支持Windows系统,而且是免费的!您可以在网络上找到很多在Windows系统中安装BIND的教程。例如,请参看“安装手册”。

安装之后,修改BIND配置文件“named.conf”,使BIND转发Emercoin域到本地Emercoin核心客户端钱包。操作如下:

zone "emc" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
zone "coin" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
zone "lib" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
zone "bazar" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};

本地局域网(Local network),BIND DNS代理服务器(BIND DNS proxy)

  如果您在本地局域网有一个服务器,将BIND安装到本地服务器是最好的选择,并将个人电脑(PC)网络配置中,设置主要DNS地址为BIND服务器。在服务器上运行Emercoin核心钱包,以使BIND可以转发请求到相应的区域,BIND的配置方法同上面讲述的完全相同。

  您也可以在局域网中的任何个人电脑上运行Emercoin核心钱包,以代替BIND服务器运行,需要做的,就是将转发地址127.0.0.1修改为该台个人电脑的IP地址。当然,这台个人电脑必须是静态的局域网IP地址。

本地局域网(Local network),DNSMASQ代理服务器(DNSMASQ proxy)

  现在的路由器通常在固件中内置DNS代理,被称为DNSMASQ。而一些如DD-WRT以及其他的WRTS固件等,允许用户对内置DNS代理进行配置。点击此处查看DD-WRT配置手册

  在此情况下,Emercoin钱包应该运行于静态IP和DNSMASQ的个人电脑上,由路由器将传递DNS请求到个人电脑。以下是说明如何添加配置参数到 dnsmasq.conf 文件,以个人电脑的局域网IP地址为192.168.1.53为例:

--server=/emc/192.168.1.53#5335
--server=/coin/192.168.1.53#5335
--server=/lib/192.168.1.53#5335
--server=/bazar/192.168.1.53#5335

公众互联网(Public Internet),直接网关(direct gateway)

  Emercoin钱包客户端现在已有创建公众网关的功能,即将标准的DNS树添加到分布式的Emercoin DNS子系统中。在这种情况下,您可以租赁任意公众域名或子域名(普通域名,如 *.com),并将此域名的NS值指向已激活DNS服务器(端口 53)的Emercoin核心钱包(在下一段中将描述如何定义端口),所有规范NS的请求将由DNS服务器传递到域名,并由Emercoin钱包客户端的NVS数据库检索后回应。

  例如,我们已经建立了一个新的域名网关“emergate.net”(Emercoin域名网关),当您单击 http://emer.coin.emergate.net   时,您的域名请求会由Emercoin核心钱包解决,你就可以直接访问Emercoin所支持的域名“emer.coin”。类似地,如“ok.coin”域名就可以直接输入以下地址直接访问:http://ok.coin.emergate.net   

  因此,如果您注册了Emercoin DNS提供的去中心化域名,这些域名都会被 Emercoin DNS网关(emergate.net)所解析,当然,其他部署了Emercoin DNS的网关同样可以解析所有EMC DNS的域名,其链接显示为 site.coin.emergate.net 或 site.coin.其他网关域名(site.coin.bitway.io)。

  要为一个新的Emercoin DNS 网关配置新的公众域名(如.com、.net等),需要指定DNS服务器来认证您的域(域名)。例如在emergate.net域名中,我们指定了2个“域名服务器”(NS)用来验证去中心化的Emercoin域名:

Name Server: SEED1.EMERGATE.NET
Name Server: SEED2.EMERGATE.NET

  您可以用whois指令查询信息。

  每个域名服务器(NS)都需要运行一个已激活Emercoin DNS服务的Emercoin核心钱包,用以作为Emercoin域名网关,需在 emercoin.conf 文件中修改DNS特定配置参数,参数的配置分为以下几种情况:

  1、如只为本机或局域网电脑(通过 Acrylic 或 BIND)运行Emercoin DNS网关,只需要在 emercoin.conf 文件中指定一个参数:

# enable emc dns
emcdns=1

  以上参数表明,激活Emercoin DNS服务,且默认端口为5335,作为允许DNS代理(acrylic/BIND/dnsmasq/其他代理程序)进行DNS转发。

  2、要作为公众DNS网关运行,需要指定一些附加参数:

# Gateway suffix. This suffix will be ignored when a request is passed to the internal gateway.
# Requests for other domain suffixes will be ignored.
emcdnssuffix=.emergate.net

# NS Server port 53 is the default NS port and must be used if the server is public and "not forward only".
emcdnsport=53

# Filter for allowed zones. Protection for "cool hackers", who try to lookup any external domains through our server
# or attack someone else by DNS amplification mechanism. Currently, only the four EMC-zones are allowed.
emcdnsallowed=.coin|.emc|.lib|.bazar

# Optional path for a file that contains names in the local gateway's NS zone (like www.emergate.net).
# Must be full path. Example:
emcdnslocalcf=/usr/share/emercoin/emcdnslocal.conf

  本地文件(emcdnslocal.conf ) 中包含了“name=value”值对;空值作为“网关是xx”(gateway as is),例如,为 emergate.net 配置的本地文件如下:

# This is local zone config
# For built-in Emercoin DNS

=A=192.241.241.153|TXT=Emercoin site
www=A=192.241.241.153|TXT=Emercoin www-site

  将在下一节中解释这些记录的格式。

创建和维护DNS记录

  Emercoin内置的DNS服务器支持以下DNS记录类型:

记录类型服务说明
AIP V4 地址
AAAAIP V6 地址
NS域名服务器记录(Name server record)
PTR指针记录(Pointer record)
CNAME别名记录(Canonical name record)
MX邮件交换记录(Mail exchange record)
TXTTXT记录
SD子域名 (see below)

  不支持SOA、WKS、和SRV记录。

  要在Emercoin区块链中插入一个完整的DNS记录,需要按照下述命令创建一个“值对”:

Name="dns:your_name_here"
Value="List of NS-records"

For example:

Name="dns:example.coin"
Value="A=192.168.0.123,127.0.0.1|AAAA=2607:f8b0:4004:806::1001|NS=ns1.google.com|TTL=4001"

  该案例中,域名“example.coin”由2个A记录(192.168.0.123 和 127.0.0.1)、1个AAAA记录(2607:f8b0:4004:806::1001)和1个NS记录(ns1.google.com)所指定。这些记录由默认分隔符“|”分隔。如有必要,您可以添加前缀符号“~”来重新定义(~[NEW_SEPARATOR_CHAR])。例如,如您希望使用“#”作为分隔符,可按如下方式分配:

Value="~#A=192.168.0.123,127.0.0.1#AAAA=2607:f8b0:4004:806::1001#NS=ns1.google.com#TTL=4001"

  请注意,如果使用空格(符号“ ”)作为分隔符,将无法插入字段里面,因此,应该选择一个适当的符号作为分隔符。

  如上所述,每个记录可以包含多个值。在提供的例子中,A-记录包含两个值,用逗号分隔。您也可以重新定义由分隔符分隔的“~[NEW_SEPARATOR_CHAR]”的值。下面的例子演示了如何两次重新定义分隔符:“/”作为记录分隔符,而“*”作为多个TXT的记录的值分隔符:

~/TXT=~*This is text, Hello!*2nd text/MX=gmail.com:33,mx.microsoft.com:66/CNAME=emc.cc.st/A=192.168.0.100,127.0.0.1"

  在这个例子中,我们演示了MX域的使用。 MX的值包含邮件交换器引用、冒号和优先级。如果省略优先级,其默认值为1。此外,在最后一个例子中遗漏了“TTL”的记录,TTL的默认值是24小时。

  综上所述:

  只有DNS记录所有者可以管理他们的记录:修改值、租赁时间,或删除值。此外,只有所有者才能转让值(域名)的给其他EMC钱包地址。这些操作可以在Emercoin核心钱包界面的控制台中,以命令“name_update”完成,或通过类似的JSON API请求进行。

子域名

  在分布式DNS的设计中,最难的部分就是任何人都可以任意支配所拥有的唯一域名,但由于区块链开放的特性,使得其他人可以注册不属于自己域名的子域名。为了改变这种情况,Emercoin DNS设计了特殊的方式管理子域名:

  •  子域名(SD)记录于DNS上级NVS值,允许在Emercoin DNS域名系统中直接查询和分辨子域名,如“SD=www,ftp,mx”

  •  域名服务器(NS)记录在DNS的上级NVS值中,允许引用到域名所有者管理的外部域名服务器上,以提供验证查询,及外部子域名解析到Emercoin DNS系统中。如“"NS=ns.example.com”

  子域名可递归到所有第三级子域名或更深层的子域名中,规则应用如下:

  • 首先,检查在上级DNS值中检查SD记录,以作为引用到子域名的请求,如果引用被发现,将在Emercoin NVS域名系统中查找子域名;

  • 接下来,在上级DNS值中检查域名服务器(NS),如果找到NS,将生成引用到外部服务器的请求;

  • 如果在SD或NS中没有分辨出解析结果,将作为上级域名返回(即忽略当前子域名前缀)。

  注意:当利用外部域名服务器时,请确保域名解析正确,包括网关后缀等,如:“emergate.net”

  举例 1 - 上级域名(父域)包含SD 和NS 记录

  • dns:example.coin -> A=1.2.3.4|SD=www,gopher|NS=ns.example.com

  • dns:www.example.coin -> A=5.6.7.8

   该例中,子域名将被如下解析:

  • example.coin 将被值[1]解析,并且返回 A=1.2.3.4

  • www.example.coin 将被值[1]所认可,被值[2]解析,并且返回A=5.6.7.8

  • gopher.example.coin 将被值 [1]所认可,但因NVS没包含一个适当的DNS记录,因此不被解析。该结果会返回到NXDOMAIN

  • mail.example.coin 将不被值[1]所认可,但NS记录将生成一个引用到外部服务器,该外部服务器来决定是否解析此子域名

  因此一个独立的记录支持灵活的混合解析:

  • www 由 Emercoin NVS(Emercoin域名值存储系统)解析;

  • 地鼠(gopher)被组织(gopher的含义参看百度百科);

  • 其他记录由授权的“NS=ns.example.com”解析。

  举例 2 - 上级域名(父域)只包含SD记录

  • dns:example.coin -> A=1.2.3.4|SD=www,gopher

  • dns:www.example.coin -> A=5.6.7.8

  在此例中,子域名将按照如下解析:

  • example.coin 被记录[1]解析,并返回 A=1.2.3.4 ;

  • www.example.coin 被记录[1]允许,由记录[2]解析,并返回 A=5.6.7.8 ;

  • gopher.example.coin 将被记录[1]所认可,但不被解析,NVS不包含相应的DNS记录,因此将返回NXDOMAIN;

  • mail.example.coin 不会被记录[1]所认可,且前缀“mail”将被忽略(因为丢失了NS记录,并且解析到如example.coin域名。

  举例 3 - 上级域名(父域)只包含NS记录

  • dns:example.coin -> A=1.2.3.4|NS=ns.example.com

  • dns:www.example.coin -> A=5.6.7.8

  在此例中,子域名将按如下解析:

  • example.coin 被记录[1]解析,并返回 A=1.2.3.4 ;

  • www.example.coin 将不被记录[1]认可,但将生成一个引用,指向到外域名部服务器ns.example.com,该外部服务器来决定是否解析此子域名;

  • 记录[2]将被忽略, 且不参与DNS解析;

  • mail.example.coin 将不被记录[1]认可,但将生成一个引用,指向到外域名部服务器ns.example.com,该外部服务器来决定是否解析此子域名。

  举例 4 - 上级域名(父域)包含非引用到子域名

  • dns:example.coin -> "A=1.2.3.4"

  • dns:mx.example.coin -> "A=5.6.7.8"

  在此例中,子域名将按如下解析:

  • example.coin -> "A=1.2.3.4"

  • mx.example.coin -> "A=1.2.3.4"

  • www.example.coin -> "A=1.2.3.4"

  • upload.ftp.example.coin -> "A=1.2.3.4"

  由于记录[1]不包含任何SD或NS记录,所有子域将被解析为“父域”example.coin。记录[2]将被忽略,并且将不参与DNS解析。

虚拟主机(vhosts)

  如果运行在虚拟主机上,将被要求修改网站服务器的配置,设置成心目中的名字,以使您的虚拟主机从众多的Emercoin网关中分辨出来(如果域名被局域网或本地解析,就不带后缀名)。

  要创建一个虚拟主机别名(vname-alias),使用星号“*”作后缀会非常容易。下面的例子显示了别名为“exchange.emc”的虚拟主机相应的apache网站服务器的配置。

<VirtualHost *:80>
  ServerAdmin okhovayko@verizon.net
  DocumentRoot "/var/www/exchange.emc/html"
  ServerName emc.cc.st  ServerAlias exchange.emc*
  ErrorLog  "/var/log/exchange.emc-error_log"
  CustomLog "/var/log/exchange.emc-access_log" common
  ScriptAlias /cgi-bin/ "/usr/local/libexec/cgi-bin/"
</VirtualHost>


 

除特别注明外,本站所有文章均为Emercoin崛起币信息网原创,转载请注明出处来自  http://emercoin.info/zh-Hans/info/存储于区块链的可信任时间戳服务(EMCTTL).html

扫一扫二维码分享