以太坊使用rpc
A. 怎么用rpc查询以太坊智能合约该笔交易是否out of gas
因为区块链技术对实现智能合约存在天然的优势。比特币、瑞泰币、莱特币、以太坊等数字加密货币都使用了区块链技术。区块链(Blockchain)是比特币的一个重要概念,本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用
B. 如何实现一个简单的RPC框架实现与使用
RPC架构分为三部分:
1)服务提供者,运行在服务器端,提供服务接口定义与服务实现类。
2)服务中心,运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
3)服务消费者,运行在客户端,通过远程代理对象调用远程服务。
C. 如何利用共享内存 实现rpc调用
关于RPC 路由器的实现主要分布在smd_rpcrouter.c、smd_rpcrouter_device.c、smd_rpcrouter_servers.c、smd_rpcrouter_clients.c等文件中。RPC路由器起着RPC服务器查询、RPC服务器和RPC客户端的注册和销毁,以及底层通信的封装功能,类似于TCP协议。
在实际的实现中,RPC路由器和RPC服务器均是作为一个虚拟的字符型设备来存在的。
下面是RPC路由器的创建过程:
代码3-11 RPC 路由器的创建过程
int msm_rpcrouter_init_devices(void)
{
int rc;
int major;
msm_rpcrouter_class=class_create(THIS_MODULE,
"oncrpc"); //创建设备节点
if (IS_ERR(msm_rpcrouter_class)) {
rc=-ENOMEM;
printk(KERN_ERR
"rpcrouter: failed to create oncrpc class ");
goto fail;
}
rc=alloc_chrdev_region(&msm_rpcrouter_devno,
0, //作为字符型设备分配资源
RPCROUTER_MAX_REMOTE_SERVERS + 1, "oncrpc");
if (rc<0) {
printk(KERN_ERR
"rpcrouter: Failed to alloc chardev region (%d) ", rc);
goto fail_destroy_class;
}
major=MAJOR(msm_rpcrouter_devno);
rpcrouter_device=device_create(msm_
rpcrouter_class, NULL, //创建设备
msm_rpcrouter_devno, NULL, "%.8x:%d",
0, 0);
if (IS_ERR(rpcrouter_device)) {
rc=-ENOMEM;
goto fail_unregister_cdev_region;
}
cdev_init(&rpcrouter_cdev, &rpcrouter_
router_fops); //字符型设备初始化
rpcrouter_cdev.owner=THIS_MODULE;
rc=cdev_add(&rpcrouter_cdev, msm_rpcrouter_devno, 1);
if (rc<0)
goto fail_destroy_device;
return 0;
fail_destroy_device:
device_destroy(msm_rpcrouter_class,
msm_rpcrouter_devno);//销毁设备
fail_unregister_cdev_region:
unregister_chrdev_region(msm_rpcrouter_devno, //去注册
RPCROUTER_MAX_REMOTE_SERVERS + 1);
fail_destroy_class:
class_destroy(msm_rpcrouter_class);
fail:
return rc;
}
D. 如何启动RPC
由于Windows服务之间有很强的相互依存关系,当RPC服务被禁用后,很多依赖于RPC服务的系统服务也不能正常运行(见图),如Messenger服务、Windows Installer服务等;另外,还可能导致某些应用程序运行失败和系统异常。下面笔者就介绍三种启动该服务的方法。
方法一:修改注册表法
点击"开始→运行",键入"Regedit"打开"注册表编辑器",展开分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs",将Start项的值修改为"00000002",重新启动系统即可。
方法二:使用sc.exe命令
点击"开始→运行",键入"cmd"进入"命令提示符"窗口,键入"sc config RpcSs start= auto"命令,系统会显示"
E. ETH以太坊Ethereum如何使用RPC调用实现web端充值提现
以太坊源码go-ethereum怎么运行
安装基于MIPS的linux头文件
$ cd $PRJROOT/kernel
$ tar -xjvf linux-2.6.38.tar.bz2
$ cd linux-2.6.38
在指定路径下创建include文件夹,用来存放相关头文件。
$ mkdir -p $TARGET_PREFIX/include
保证linux源码是干净的。
$ make mrproper
生成需要的头文件。
$ make ARCH=mips headers_check
$ make ARCH=mips INSTALL_HDR_PATH=dest headers_install
将dest文件夹下的所有文件复制到指定的include文件夹内。
$ cp -rv dest/include/* $TARGET_PREFIX/include
最后删除dest文件夹
$ rm -rf dest
$ ls -l $TARGET_PREFIX/include
F. rpc是什么如何处理
远程过程调用 (RPC) 是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。在 RPC 中,发出请求的程序是客户程序,而提供服务的程序是服务器。
RPC 中处理 TCP/IP 上的消息交换的部分存在一个缺陷。错误地处理格式不正确的消息会导致出现错误。这种特定的错误会影响底层的 DCOM 接口,此接口侦听 TCP/IP 端口 135。通过发送格式不正确的 RPC 消息,攻击者可以使一台计算机上的 RPC 服务出现问题,进而使任意代码得以执行。
远程过程调用 (RPC) 是 Windows 操作系统使用的一个协议。RPC 提供了一种进程间通信机制,通过这一机制,在一台计算机上运行的程序可以顺畅地执行某个远程系统上的代码。该协议本身是从 OSF(开放式软件基础)RPC 协议衍生出来的,只是增加了一些 Microsoft 特定的扩展。
RPC 中处理通过 TCP/IP 的消息交换的部分有一个漏洞。此问题是由错误地处理格式不正确的消息造成的。这种特定的漏洞影响分布式组件对象模型 (DCOM) 与 RPC 间的一个接口,此接口侦听 TCP/IP 端口 135。此接口处理客户端计算机向服务器发送的 DCOM 对象激活请求(例如通用命名约定 (UNC) 路径)。
为利用此漏洞,攻击者可能需要向远程计算机上的 135 端口发送特殊格式的请求。
减轻影响的因素:
为利用此漏洞,攻击者可能需要拥有向远程计算机上的 135 端口发送精心编造的请求的能力。对于 Intranet 环境,此端口通常是可以访问的;但对于通过 Internet 相连的计算机,防火墙通常会封堵 135 端口。如果没有封堵该端口,或者在 Intranet 环境中,攻击者就不需要有任何其他特权。
最佳做法是封堵所有实际上未使用的 TCP/IP 端口。因此,大多数连接到 Internet 的计算机应当封堵 135 端口。RPC over TCP 不适合在 Internet 这样存在着危险的环境中使用。像 RPC over HTTP 这样更坚实的协议适用于有潜在危险的环境。
这是一个缓冲区溢出漏洞。成功利用此漏洞的攻击者有可能获得对远程计算机的完全控制。这可能使攻击者能够对服务器随意执行操作,包括更改网页、重新格式化硬盘或向本地管理员组添加新的用户。
要发动此类攻击,攻击者需要能够向 RPC 服务发送一条格式不正确的消息,从而造成目标计算机受制于人,攻击者可以在它上面执行任意代码。
防范来自 Internet 的远程 RPC 攻击的最佳方法是:将防火墙配置为封堵 135 端口。RPC over TCP 不适合在 Internet 这样存在着危险的环境中使用。
此漏洞是由于 Windows RPC 服务在某些情况下不能正确检查消息输入而造成的。如果攻击者在 RPC 建立连接后发送某种类型的格式不正确的 RPC 消息,则会导致远程计算机上与 RPC 之间的基础分布式组件对象模型 (DCOM) 接口出现问题,进而使任意代码得以执行。
G. 如何实现 RPC 框架的要点浅析
RPC 框架分层
我们可以对 RPC 框架进行抽丝剥茧,并从层次上把 RPC 分为四层:RPC 物理通讯层、
RPC 通讯协议层、RPC 连接会话层、RPC 应用层。
a. RPC 物理通讯层,根据实际用途可以选择合适的实际物理通讯协议:
1). 可以使用 TCP 网络通讯协议,直接调用套接字 socket 接口函数或者 IOCP 接
口函数进行封装;
2). 可以使用 UDP 网络通讯协议,但必须自己来维护数据包的时序、丢包重传、以
及虚拟连接状态。虽然使用 UDP 相对比较麻烦一点,但是 UDP 也有很多优点,
如:NAT 穿透相对容易、每包数据完整等等;
3). 可以使用 SHM 共享内存通信,用于同一主机不同进程之间的 RPC 调用,优点
是传输速度快,缺点是只能在同一主机上运行;
4). 可以使用第三方通讯模块接口,如:蓝牙、串口、USB连线接口等等。优点是可
以跨终端设备进行相互调用、缺点是受制于第三方通讯模块接口。
b. RPC 通讯协议层就是通讯双方的消息包定义,以及每种消息的数据组织,只需要负
责收发的数据流,具体如何收发数据由物理通讯层去处理。
1). 消息包 = <消息头> + [消息体],也就是说由消息头和消息体组成一个消息包;
2). 消息头必须含有:消息包ID、消息类型、消息体长度、函数ID和调用返回码。
消息头若要做得更完善还可以添加检验码等等,但消息头所占尺寸不宜太大,
否则 RPC 的调用开销就更大了。
3). 消息类型至少含有以下几种:
a). 心跳,含请求和应答;
b). 连接握手,含请求和应答;
c). 登录应用,含请求和应答;
d). 登出应用,含请求和应答;
e). 取定义集,含请求和应答,即读取已登录应用的函数定义集;
f). 调用函数,含请求和应答;
g). 函数取消,即取消已提交的调用函数请求;
h). 函数确认,即函数返回结果确认;
i). 发送数据,用于扩展 RPC 为数据包通讯。
c. RPC 连接会话层,负责通讯双方的连接状态管理,包括以下几个方面:
1). 通过连接握手来确认会话双方的合法性;
2). 通过心跳维护连接在线情况;
3). 通过登录应用来获取对方应用提供的函数定义集,只有知道函数的参数和返回
值定义才可以调用函数,函数定义是参数和返回值的序列化/反序列化前提;
4). 通过登出应用来关闭对端提供的函数调用;
5). 管理函数调用的整个生命周期;
6). 管理发送数据包缓冲队列、以及接收到数据包的处理。
d. RPC 应用层,负责应用内的函数定义、管理连接的登录登出、分配函数调用请求。
1). 在函数定义中,函数参数和返回值的数据类型要支持足够多,不同数据类型可
以便于数据展示,也增加了 RPC 框架的灵活性。同时被 RPC 调用的函数回调
类型要支持多种调用方式,可以适用于更多开发语言。
2). 在连接登录到应用后才可以接受函数调用请求,当连接登出应用后自动取消此
连接的所有函数调用请求;
3). 应用需要管理运行线程,用于执行已分配的函数调用请求。
H. 以太坊如何使用web3.js或者rpc接口获取交易数据交易时间与确认数
如果要查询主网上的交易记录,可以使用etherscan。但是,如果是你自己搭建的私链,应该如何查询交易记录呢?
答案是你需要自己监听链上的日志,存到数据库里,然后在这个数据库中查询。例如:
varaddr=""
varfilter=web3.eth.filter({fromBlock:0,toBlock:'latest',address:addr});
filter.get(function(err,transactions){
transactions.forEach(function(tx){
vartxInfo=web3.eth.getTransaction(tx.transactionHash);
//这时可以将交易信息txInfo存入数据库
});
});
web3.eth.filter()用来监听链上的日志,web3.eth.getTransaction()用来提取指定交易的信息,一旦获得交易信息,就可以存入数据库供查询用了。
推荐一个实战入门,你可以看看:以太坊教程
I. 如何启动RPC服务
PRC 全名是 REMOTE PROCEDURE CALL你可以尝试在管理工具——服务中启动他,如果不能点击启动(按钮是灰色)
方法一:修改注册表法
点击“开始→运行”,键入“Regedit”打开“注册表编辑器”,展开分支“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs”,将Start项的值修改为“00000002”,重新启动系统即可
方法二:使用sc.exe命令
点击“开始→运行”,键入“cmd”进入“命令提示符”窗口,键入“sc config RpcSs start=auto”命令,系统会显示“[SC] ChangeServiceConfig SUCCESS”,这样就可以成功启动RPC服务。
注意:要想使用“sc”命令必须安装Windows 2000/2003 Resource Kit(资源工具包),否则使用该命令无效。
方法三:使用故障恢复控制台
以Windows XP系统为例,在光驱中放入安装光盘,并且在BIOS参数中设置为从CD-ROM启动;启动电脑后,系统进入到Windows XP安装界面,按下“R”键登录到故障恢复控制台。在故障恢复控制台下,键入“enable RpcSs service_auto_start”命令,然后再键入“exit”命令,重新启动系统,以正常模式登录,即可成功启动RPC服务。
注意:“Enable”是故障恢复控制台提供的一个用来启动系统服务和设备驱动程序的命令,只能在故障恢复控制台下使用。
SC命令
“sc”命令是Windows 2000 Resource Kit提供的一个与系统服务通信的命令,“sc config”是其中的一个子命令,用来修改配置注册表中或服务数据库中的服务项目。命令格式如下:
sc <server> config [service name] <option1> <option2>...
参数选项:start=<boot system auto demand disabled>
其中,“server”为服务器名,该命令在本机上使用,此选项可以省略,默认在本机上执行该命令;“start”参数选项有“boot、system、auto、demand、disabled”五种启动类型,后面的三个分别对应“自动、手工、禁止”。