webankblockchain / wecross Goto Github PK
View Code? Open in Web Editor NEWWeCross跨链路由
License: Apache License 2.0
WeCross跨链路由
License: Apache License 2.0
执行:sendTransaction payment.fabric.sacc fabric_user1 set a 66
日志:
WeCrossRPCService() - request: Request{version='1', path='payment.fabric.sacc', method='sendTransaction', accountName='fabric_user1', data=TransactionRequest{method='set', args=[a, 666], options={}}}; url: https://192.168.1.39:8250/payment/fabric/sacc/sendTransaction
这里不知咋就成https的请求了 我配置的内网主机ip
fabric在另外一个主机上部署
直接命令行执行 query和invoke都正常
发交易的命令叫sendTransaction,两阶段事务中执行一个事务步骤(本质还是发交易)叫execTransaction,如果有更好的命名方式,请留言。
在项目WeCross-Console中添加一个golang版chaincode,功能和HelloWorld.sol相同,能够通过跨链控制台部署,且调用成功。
Driver接口的实例化类如BCOSDriver中有一个私有的requestBuilder方法,用来构造请求,这个方法比较通用,可以移到Stub包中,通过工厂类构造,工厂类如下:
public class RequestFactory {
public static Request requestBuilder(int type, String content) {
return requestBuilder(type, content.getBytes(StandardCharsets.UTF_8));
}
public static Request requestBuilder(int type, byte[] content) {
Request request = new Request();
request.setType(type);
request.setData(content);
return request;
}
}
BUG描述
macOS下快速搭建Demo失败,错误发生在demo/build.sh
脚本32行。
在config_bcos_stub_toml
函数中130行,调用sed_i
函数,发生如下错误:
sed: can't read 16,20d: No such file or directory
sed_i
改成sed -i
即可。
WeCross项目内,com.webank.wecross.transaction包的TransactionManager类,没有被任何类使用,请将这个类及其代码文件移除,并确认对其他功能没有影响。
按照文档,下载代码并执行编译,结果失败。
Task :test
com.webank.wecross.test.network.NetworkManagerTest > addAndRemoveConcurrentTest STANDARD_OUT
2019-12-06 10:46:15.523 [Thread-7] INFO NetworkManagerTest(:) - Remove resource
... ...
com.webank.wecross.test.peer.PeerResourcesTest > noMyselfTest STANDARD_OUT
2019-12-06 10:46:15.734 [Test worker] ERROR PeerResources(:) - Myself resources has not been set.
2019-12-06 10:46:15.734 [Test worker] ERROR PeerResources(:) - Myself resources has not been set.
... ...
2019-12-06 10:46:21.192 [Test worker] ERROR ResourceLeakDetector(:) - LEAK: HashedWheelTimer.release() was not called before it's garbage-collected. See http://netty.io/wiki/reference-counted-objects.html for more information.
Recent access records:
Created at:
io.netty.util.HashedWheelTimer.(HashedWheelTimer.java:284)
io.netty.util.HashedWheelTimer.(HashedWheelTimer.java:217)
io.netty.util.HashedWheelTimer.(HashedWheelTimer.java:196)
io.netty.util.HashedWheelTimer.(HashedWheelTimer.java:178)
io.netty.util.HashedWheelTimer.(HashedWheelTimer.java:162)
io.netty.util.HashedWheelTimer.(HashedWheelTimer.java:121)
com.webank.wecross.p2p.netty.P2PService.(P2PService.java:33)
com.webank.wecross.test.Mock.MockP2PService.(MockP2PService.java:8)
com.webank.wecross.test.peer.PeerManagerTest.newMockPeerManager(PeerManagerTest.java:102)
com.webank.wecross.test.peer.PeerManagerTest.syncByRequestPeerInfo(PeerManagerTest.java:128)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
....
2019-12-06 10:46:21.254 [Test worker] ERROR WeCrossHost(:) - Startup host error: {}
java.lang.NullPointerException: null
at java.util.regex.Matcher.getTextLength(Matcher.java:1283) ~[?:1.8.0_221]
at java.util.regex.Matcher.reset(Matcher.java:309) ~[?:1.8.0_221]
at java.util.regex.Matcher.(Matcher.java:229) ~[?:1.8.0_221]
at java.util.regex.Pattern.matcher(Pattern.java:1093) ~[?:1.8.0_221]
at com.webank.wecross.p2p.netty.common.Utils.validIP(Utils.java:33) ~[main/:?]
at com.webank.wecross.p2p.config.P2PConfig.validConfig(P2PConfig.java:140) ~[main/:?]
at com.webank.wecross.p2p.netty.Initializer.start(Initializer.java:152) ~[main/:?]
at com.webank.wecross.p2p.netty.P2PService.start(P2PService.java:93) ~[main/:?]
at com.webank.wecross.host.WeCrossHost.start(WeCrossHost.java:26) ~[main/:?]
... ...
> Task :test FAILED
FAILURE: Build failed with an exception.
Process 'Gradle Test Executor 1' finished with non-zero exit value 255
This problem might be caused by incorrect test process configuration.
Please refer to the test execution section in the User Manual at https://docs.gradle.org/5.2.1/userguide/java_testing.html#sec:test_execution
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
BUILD FAILED in 4m 9s
WeCross项目的com.webank.wecross.network.rpc.handler.URIHandler类中,Callback类的onResponse函数,声明了名为RestResponse的模板类型,没有声明模板类的匹配符,属不规范的用法。
原函数声明:
void onResponse(RestResponse restResponse);
可以修改为:
void onResponse(RestResponse<?> restResponse);
在进行接入bcos链时,在对应目录下执行部署代理合约命令时
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos.normal.proxy.ProxyContractDeployment deploy chains/bcos bcos_user1 # deploy conf下的链配置位置 账户名
返回如下错误:```
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/demo/routers-payment/127.0.0.1-8250-25500/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/demo/routers-payment/127.0.0.1-8250-25500/plugin/bcos2-stub-1.0.0-rc4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/demo/routers-payment/127.0.0.1-8250-25500/plugin/bcos2-stub-gm-1.0.0-rc4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
FabricStubFactory和BCOSStubFactory的generateConnection方法在执行add_chain.sh脚本时被调用到,可在此函数执行成功后加上输出Generate xxx success
信息来提示用户。
两阶段事务是一种原子性的分布式事务算法,在数据库和分布式系统等领域的应用非常广泛,两阶段事务用于应对分布式系统可能遇到的网络故障、宕机、程序异常和断电等故障。区块链跨链网络中,多个相互联通的区块链构成了一个更大规模的分布式系统,这意味着有更多的网络连接和更多故障的可能性,因此两阶段事务对于跨链同样具有很大的意义。
与传统分布式系统的两阶段事务一样,用于跨链的两阶段事务的逻辑架构中一样有事务管理器(Transaction Manager)和资源管理器(Resource Manager)两种角色,其中,事务管理器以事务为维度管理事务的进度和状态,资源管理器以资源为维度管理参与事务资源的状态。
WeCross中,事务管理器和资源管理器均由智能合约或链码(Fabric,后统称为智能合约)来实现,物理架构根据是否有治理链,分两种情况:
无治理链的架构
有治理链的架构
分析一个标准的两阶段事务,分成功和失败两种场景。
成功场景:
失败场景:
可见,两阶段事务包含以下核心功能:
两阶段事务,包含事务代理合约和可选的事务列表合约。
事务代理合约接口:
接口 | 参数 | 返回值 | 说明 |
---|---|---|---|
开始事务 | 事务ID, 合约地址列表 | 是否已经成功开始事务 | 开始事务,锁定相关合约非本事务的写操作和事务操作 |
提交事务 | 事务ID | 是否已经成功及提交事务 | 提交事务,解除相关合约写操作与事务操作的锁定 |
回滚事务 | 事务ID | 是否已经成功回滚事务 | 回滚事务,解除相关合约写操作与事务操作的锁定 |
调用 | 事务ID, 步骤编号, 合约地址, 合约函数ABI, 参数encoded | 调用结果, 调用结果encoded | 执行调用,受隔离级别影响 |
发送交易 | 事务ID, 步骤编号, 合约地址, 合约函数ABI, 参数encoded | 交易执行结果, 交易执行结果encoded | 执行交易,受事务状态影响 |
获取事务交易历史 | 事务ID | 交易历史数组(包括步骤编号、合约地址、合约函数ABI、参数encoded) | 获取某个事务ID所有的操作历史 |
事务代理合约Solidity接口代码
pragma solidity >=0.4.22 <0.7.0;
contract TransactionAgent {
function begin(string transactionID, address[] resources) returns(int) public;
function commit(string transactionID) returns(int) public;
function rollback(string transactionID) returns(int) public;
function call(string transactionID, int step, address resourceAddress, string functionABI, byte[] functionArguments) returns (int, byte[] functionReturns) public;
function sendTransaction(string transactionID, int step, address resourceAddress, string functionABI, byte[] functionArguments) returns (int, byte[] functionReturns) public;
function getTransactionHistory(string transactionID) returns (int[], address[], string[], byte[][]) public;
}
事务执行的过程中,事务代理合约会将事务的步骤和结果保存到数据表中,表结构如下:
字段 | 数据类型 | 例子 | 描述 |
---|---|---|---|
事务ID | 数值 | 1 | 事务ID,作为主键,包含多个Entry |
操作者 | 字符串 | c1228ce3dc5f7f71351246429802573d | 操作者的账号 |
操作类型 | 枚举 | Begin、End、Transaction、Rollback | 步骤的操作类型,是正常的交易还是回滚,包括Begin和End两种特殊类型 |
资源路径 | 字符串 | zone.chain.resource | 步骤操作的资源路径 |
交易函数 | 字符串 | "prepare" | 步骤的操作函数 |
交易参数 | 字符串 | "arg1","arg2","arg3" | 步骤的操作参数 |
交易状态 | 枚举 | 'Start'、'Success'、'Failed' | 步骤的操作状态,Start标识已记录准备开始,Success标识成功,Failed标识已失败 |
时间戳 | 时间 | 2020-05-06 16:00:00 | 步骤的时间戳 |
一个正常的两阶段事务流程由WeCross Router发起,由Router结束,流程如下:
其中,事务列表合约仅在有管理链时使用,无管理链时,事务列表合约的时序可以省略。
如果事务执行到中途发生了任何异常,用户可以自行判断是否要取消事务,调用事务代理合约的rollback接口回滚事务。如果用户的系统发生了异常,无法调用rollback接口,WeCross Router会在一定时间后,自动调用rollback回滚事务。
上述的事务流程会在数表中存入以下数据:
事务ID | 操作者 | 操作类型 | 资源路径 | 交易函数 | 交易参数 | 交易状态 | 时间戳 |
---|---|---|---|---|---|---|---|
0 | A | Begin | zone.chain.resources1, zone.chain.resources2 | Start | 2020-05-06 15:00:00 | ||
0 | A | Transaction | zone.chain.resources1 | begin | 0 | Start | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources1 | begin | 0 | Success | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources2 | begin | 0 | Start | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources2 | begin | 0 | Success | 2020-05-06 15:00:00 |
0 | A | Begin | zone.chain.resources1, zone.chain.resources2 | Success | 2020-05-06 15:00:00 | ||
0 | A | Transaction | zone.chain.resources1 | tx1 | args1 | Start | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources1 | tx1 | args1 | Success | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources2 | tx2 | args2 | Start | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources2 | tx2 | args2 | Success | 2020-05-06 15:00:00 |
0 | A | Commit | zone.chain.resources1, zone.chain.resources2 | Start | 2020-05-06 15:00:00 | ||
0 | A | Transaction | zone.chain.resources1 | commit | 0 | Start | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources1 | commit | 0 | Success | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources2 | commit | 0 | Start | 2020-05-06 15:00:00 |
0 | A | Transaction | zone.chain.resources2 | commit | 0 | Success | 2020-05-06 15:00:00 |
0 | A | Commit | zone.chain.resources1, zone.chain.resources2 | Success | 2020-05-06 15:00:00 |
两阶段事务是全新的特性,除了新增的两阶段事务接口begin()、commit()和rollback(),原接口跟旧版本WeCross是一致的,因此不存在与旧版本的兼容性问题。
两阶段事务重在解决一致性和可用性的问题,对于区块链的安全性并无太多考虑,两阶段事务需要Router有极大的权限来操作参与事务的所有资源,此处的权限控制留给后续的权限CIP解决。
HTLCScheduler类中的start函数太复杂了,可拆分成多个函数。
跨链是区块链行业的前沿课题,业界对跨链的定义和设计都有很多不同的理解。跨链的场景、跨链的网络架构、跨链的交互逻辑,都有大量的研究和讨论。基于这个现状,WeCross团队不局限于自己探索和解决所有跨链的问题,而是将已知或可能存在的场景和需求,以CIP(WeCross Improvement Proposals)的形式提出解决方案,邀请广大区块链从业者和用户共同参与方案的规划,一起讨论和完善方案的设计,由WeCross团队采纳,最终合作完成WeCross功能的实现。
浏览CIP:https://github.com/WeBankFinTech/WeCross/labels/CIP
CIP的描述应该简洁精炼,围绕着目标进行,包含以下要素:
CIP遵循一套预设的工作流,所有CIP的进展会公示在Issue中,有独特的标签,CIP工作流包含以下阶段:
一个正常采纳的CIP工作流为:提案 -> 方案 -> 投票 -> 采纳 -> 结束
一个被拒绝的CIP工作流为:提案 -> 方案 -> 投票 -> 拒绝
对于热心提交CIP、评论CIP并最终被采纳的用户,WeCross团队根据行为的不同,给予相应激励:
参考资料:EIP方案
EIP全称Ethereum Improvement Proposals,是以太坊标准的提案格式。
EIP1介绍了EIP的标准格式和分类(https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md)
EIP包含多种类型,包括:
- Core:核心提案,指对以太坊的核心功能,如EVM等模块的提案,例如EIP5,提出了对CALL和RETURN的gas计算方案。(https://github.com/ethereum/EIPs/blob/master/EIPS/eip-5.md)
- Networking:网络提案,涉及P2P模块、网络协议和轻客户端协议等,例如EIP8提出了基本的RLP编解码协议、包头协议和握手协议等等。(https://github.com/ethereum/EIPs/blob/master/EIPS/eip-8.md)
- Interface:接口提案,与API、RPC和ABI相关,如EIP6提出了将SUICIDE的语法改名为SELFDESTRUCT,还有ABI编解码协议。
- ERC:应用层面的提案,如智能合约、命名协议、dapp目录结构规范等,如知名的ERC20(ethereum/EIPs#2 )合约。
其它的诸如Meta EIP和Informational EIP则是相对没那么正式的EIP,用于一些讨论、建议等场景。
遵循EIP1的描述,一个正式的EIP包含以下内容:
- Preamble:RFC 822风格的内容概要,包括EIP编号、作者等信息
- Abstract:200字以内的EIP内容概要
- Specification:规格描述
- Backwards Compatibility:前向兼容性,该EIP与旧版本的兼容性
- Test Cases:测试用例
- Implementations:实现的详细描述,可以用代码描述
- Security Considerations:安全因素,包括账户安全、密码学安全等一些跟安全相关的考量
- Copyright Waiver:版权相关
EIP遵循如下流程和步骤:
- Idea:简单描述EIP的想法,并提交一个草案PR到EIP项目
- Draft:PR被合入以后,在期限内继续完善EIP的内容,期限通常是14天(可协商)
- Last Call:期限到达前,EIP会在项目网页上展示,如果设计理念改变、或是有无法解决的争议,EIP会回到Draft状态,否则进入下一个状态(https://eips.ethereum.org/)
- Accepted:EIP被接受,开始规划开发、是否要硬分叉等事项
- Final:EIP实现后,该EIP转为Final状态
截至目前(2020-05-14),以太坊的所有EIP中,55个EIP是已实现(Final)状态,184个EIP是草案(Draft)状态,5个EIP是展示(Last Call)状态,1个EIP是接受(Accepted)状态,正在开发。从作者来看,大部分已实现(Final)状态的EIP,都是由以太坊的核心成员如Vitalik Buterin、Christian Reitwiessner、Alex Beregszaszi等人提出,草案(Draft)状态的EIP,来源比较多样。
因为网络原因,构建项目下载依赖偶尔会出现卡顿。
试试把国内知名的maven仓库添加到build.gradle
文件的repositories
,问题可能就解决了哦。
项目列表:
写一个Demo搭建脚本,实现两个Router分别连接不同channel的同一条Fabric链,并且Router之间互连,其中部署Router和Fabric可以复用现有的脚本。
社区成员767472021 #405 为WeCross-1.0.0RC4版贡献了一个Fabric跨Channel的Demo脚本build_cross_channel.sh。
请更新脚本代码,以适配WeCross正式版。
目前, WeCross提供了两种区块链Stub:
一起开发一个新的Stub吧,期待好汉揭榜! 😍
这是一个极具挑战的任务,如果感兴趣,请留言,社区将协助你完成开发。
在白皮书上没有看到相关性能的描述,想咨询一下wecross在性能方面的表现目前是否有数据支撑
把WeCross的各个项目的依赖更新到同版本的最新版本吧!修改build.gradle
文件的dependencies
即可。
例如,将
compile 'org.springframework.boot:spring-boot-starter-log4j2:2.1.13.RELEASE'
修改为
compile 'org.springframework.boot:spring-boot-starter-log4j2:2.1.16.RELEASE'
项目列表
BUG描述
简要描述 BUG 的表现,造成的影响。
执行 :
newHTLCTransferProposal payment.bcos.htlc bcos 5405166a2bfc5d1eddf25625b4e8595f40d446243966f1d5786bab272bb12958 ec775276eb6df852988a94cedbd6f8275fdd093ce7d134e1c1aa2bede7f4e0f7 true 0x55f934bcbe1e9aef8337f5551142a442fdde781c 0x2b5ad5c4795c026514f8317c7a215e218dccd6cf 700 1593485531 [email protected] [email protected] 500 1593485231
响应:
Response{
version='1',
errorCode=52000,
message='Account is null',
data=null
}
问题1:
上述问题是否为接受者地址不存在造成?该地址该如何生成?
问题2:
事务案例中的部署流程缺少用户配置相关细节描述, 接入是借鉴手动组网中的方式嫁接过来操作的是否会存在问题?
想了解WeCross源码!那么补充单元测试绝对是最便捷最高效的方式之一。以类为单位,了解各个小功能的代码执行流程,理清模块之间的依赖关系,点滴之间,凝汇拳拳劲流。
思路如下:(可在评论中直接讨论)
如果需要router调用BCOS任意地址的合约,可以实现一个由sdk发起的注册CNS操作,把address和abi发给router,router注册CNS,如果注册成功,就可以直接用path调用链上资源,不需要在router里配abi或者resource了
诸位大佬:麻烦看个问题
接入fabric 部署代理合约的时候报错:
ERROR: asyncCustomCommand instantiate error: Invoke orderer timeout(Have you configured all endorsements policy required peers in resource?)
fabric docker 日志:
2020-10-29 07:22:39.420 UTC [endorser] ProcessProposal -> ERRO 0ee [channel-1][415643ea] simulateProposal() resulted in chaincode name:"WeCrossProxy" response status 500 for txid: 415643ea060e143f5c301ebfde041af70ec008adae376c4e4ae2f218d92b7336
router在192.168.1.39
fabric-peer0.org1在192.168.1.17:7051
fabric-orderer在192.168.1.18:7050
局域网,无网络策略
跨链路由启动时需要为各个链部署系统合约,包括代理合约(WeCrossProxy)和桥接合约(WeCrossHub),用户会根据提示分别完成部署,如果有n条链m个系统合约,那么用户需要执行n*m次部署命令,不太友好。
一种优化方式是:通过脚本将每条链的系统合约操作命令合并。
bash systemResources.sh -dPH -c chains/my_bcos -t BCOS2.0
bash systemResources.sh -uPH -c chains/my_bcos_gm -t GM_BCOS2.0
bash systemResources.sh -aH -c chains/my_fabric -t Fabric1.4
命令解析:
实现systemResources.sh脚本。
不同链的系统合约操作命令如下:
# 代理合约
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos.normal.preparation.ProxyContractDeployment deploy [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos.normal.preparation.ProxyContractDeployment upgrade [chainName]
# 桥接合约
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos. normal.preparation.HubContractDeployment deploy [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos. normal.preparation.HubContractDeployment upgrade [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos. normal.preparation.HubContractDeployment getAddress [chainName]
# 代理合约
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos. guomi.preparation.ProxyContractDeployment deploy [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos. guomi.preparation.ProxyContractDeployment upgrade [chainName]
# 桥接合约
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos.guomi.preparation.HubContractDeployment deploy [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos.guomi.preparation.HubContractDeployment upgrade [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.bcos.guomi.preparation.HubContractDeployment getAddress [chainName]
# 代理合约
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment deploy [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeploymentt upgrade [chainName]
# 桥接合约
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.fabric.hub.HubChaincodeDeployment deploy [chainName]
java -cp 'conf/:lib/*:plugin/*' com.webank.wecross.stub.fabric.hub.HubChaincodeDeployment upgrade [chainName]
所有debug和trace级别的日志打印姿势修改为:
if (logger.isDebugEnabled()) {
logger.debug(" debug log message ");
}
if (logger.isTraceEnabled()) {
logger.trace(" trace log message ");
}
项目列表:
目前Java SDK主要的功能是实现RPC服务的访问,提供了同步和异步的调用接口。同步接口使用Apache的Httpclient作为客户端,并使用RestTemplate封装Http请求;异步接口则是基于Netty实现的,性能较高。
显而易见,目前SDK的依赖非常重,包括Appach Httpcomponents和Spring Boot。既然异步接口已经有了,那么用其它的方式实现一套同步接口必要性不大,直接对异步接口再封装转成同步就可以了。
这个任务比较有挑战,不过极客的你定能漂亮地完成!
BUG描述
[ERROR] BCOS-RPC port 8545 is not avaliable. Are there any other blockchain is running?
重现方式
cd fisco/nodes/127.0.0.1
bash stop_all.sh
netstat -lntpu
,已经没有8545Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 466/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 587/sshd
tcp6 0 0 :::7946 :::* LISTEN 586/dockerd
udp 0 0 127.0.0.53:53 0.0.0.0:* 466/systemd-resolve
udp 0 0 172.26.86.56:68 0.0.0.0:* 24251/systemd-netwo
udp 0 0 127.0.0.1:323 0.0.0.0:* 599/chronyd
udp 0 0 0.0.0.0:4789 0.0.0.0:* -
udp6 0 0 ::1:323 :::* 599/chronyd
udp6 0 0 :::7946 :::* 586/dockerd
bash clear.sh
bash build.sh
环境
routers-payment/127.0.0.1-8250-25500]$ tail -f logs/warn.log 2020-05-13 18:29:06.067 [QuartzScheduler_Worker-1] WARN HTLCJob() - current round failed, path: payment.bcos.htlc, errorMessage: error in getNewContractTxInfo, internalMessage: Fabric driver call exception: java.lang.Exception: Illegal account type for fabric call: BCOS2.0 2020-05-13 18:29:08.030 [QuartzScheduler_Worker-1] ERROR FabricDriver() - Fabric driver call exception: java.lang.Exception: Illegal account type for fabric call: BCOS2.0 2020-05-13 18:29:08.030 [QuartzScheduler_Worker-1] ERROR WeCrossHTLC() - call, method: getNewContractTxInfo, errorCode: 3101, errorMsg: Fabric driver call exception: java.lang.Exception: Illegal account type for fabric call: BCOS2.0
Describe the bug
错误如下
WeCross start failed
See logs/error.log for details
Error log
2020-09-21 23:38:17.348 [main] ERROR FabricStubFactory() - newConnection exception: java.lang.Exception: WeCrossProxy has not been deployed to all org
2020-09-21 23:38:17.349 [main] ERROR ZonesConfig() - Init localConnection: classpath:chains/fabric-Fabric1.4 failed
2020-09-21 23:38:17.349 [main] ERROR ZonesConfig() - Init localConnection failed
Start log
. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )__ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' || .__|| ||| |_, | / / / /
=========||==============|/=////
:: Spring Boot :: (v2.1.13.RELEASE)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/demo/demo/routers-payment/127.0.0.1-8251-25501/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/demo/demo/routers-payment/127.0.0.1-8251-25501/plugin/bcos2-stub-1.0.0-rc4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/demo/demo/routers-payment/127.0.0.1-8251-25501/plugin/bcos2-stub-gm-1.0.0-rc4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Load classpath:wecross.toml ...
Initializing StubManager...
Initializing ZoneMap ...
WeCrossProxy has not been deployed to: [Org1, Org2]
Usage:
java -cp 'conf/:lib/:plugin/' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment check [chainName]
java -cp 'conf/:lib/:plugin/' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment deploy [chainName]
java -cp 'conf/:lib/:plugin/' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment upgrade [chainName]
Example:
java -cp 'conf/:lib/:plugin/' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment check chains/fabric
java -cp 'conf/:lib/:plugin/' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment deploy chains/fabric
java -cp 'conf/:lib/:plugin/' com.webank.wecross.stub.fabric.proxy.ProxyChaincodeDeployment upgrade chains/fabric
目前WeCross Router和区块链之间的交互接口包括:
有没有不合适的,或者需要增加的,欢迎在留言区提出你的想法。
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Additional context
Add any other context about the problem here.
在项目WeCross-Console中添加一个solidity合约,功能和sacc.go相同,能够通过跨链控制台部署,且调用成功。
WeCross项目使用google-java-format
作为代码格式化工具,不过当函数过长时,就出现了如下的尴尬局面,请修复:
if (logger
.isDebugEnabled()) {
logger
.debug(
" hash: {}, response: {}",
receipt
.getTransactionHash(),
transactionResponse);
}
} catch (
BCOSStubException
e) {
logger
.warn(
" e: ",
e);
callback
.onTransactionResponse(
new TransactionException(
e
.getErrorCode(),
e
.getMessage()),
null);
}
项目列表:
WeCross支持合约发起跨链调用,原理及用法参见技术文档。
背景:目前跨链调用调度器InterchainScheduler在处理跨链请求时,一定会进行回调操作。因此,在合约里发起跨链调用时必须要有回调。
任务:InterchainScheduler新增回调资源路径的判断,如果为空,则不进行回调,而是将目标链的调用结果注册到桥接合约。
关联至issue:
WeBankBlockchain/WeCross-WebApp#128 (comment)
注册新账户后,在登录时,如果未配置链账户,可增加引导,配置链账户
有的关键类例如WeCross-Router项目中的PeerInfoMessageData
,因为没有重载toString
方法,导致日志打印不全。
帮忙找一找还有没有遗漏的关键类,把这个方法补上吧!
项目列表:
Hi, there.
I am a new user for wecross. When I built the demo build_cross_all.sh, it returns the below error:
WeCross-Account-Manager start failed
See logs/error.log for details
Error log
2020-12-24 16:17:45.030 [main] ERROR SqlExceptionHelper() - Communications link failure
.....................................
Initializing TomcatServletWebServerFactory: Service{address='0.0.0.0', port=8340, sslKey='classpath:ssl.key', sslCert='classpath:ssl.crt', caCert='classpath:ca.crt', sslOn=true}
Hibernate: drop table if exists hibernate_sequence
ERROR: Database connection exception, please check!
Any requirement I need for fixing the error?
将WeCross项目中的
ObjectMapper objectMapper = new ObjectMapper()
统一替换为
ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper()
new出来的ObjectMapper对象解析json字符串字段发生变更或者json字符串与java对象字段不对应时,可能抛出异常。
BCOS Stub和Fabric Stub插件的build.gradle文件中可以使用minimize()命令最优化jar包大小。例如:
// 找到shadowJar任务,在末尾添加minimize()
shadowJar {
// do task
// Enable this leads to tcnative core
minimize()
}
WeCross项目内的com.webank.wecross.Generator类,main函数内包含了类型为ApplicationContext的context局部变量,该变量打开后没有任何释放机制,可能导致内存泄漏,请将该变量的声明移动到Generator类
原代码(部分):
public class Generator {
public static void main(String[] args) {
ApplicationContext context =
new AnnotationConfigApplicationContext(StubManagerConfig.class);
修改为:
public class Generator {
private static ApplicationContext context;
public static void main(String[] args) {
context = new AnnotationConfigApplicationContext(StubManagerConfig.class);
目前,WeCross调用合约分为call
和sendTransaction
两个接口,一个用于查询,一个用于发交易。
对于区块链内部,一个交易(Transacion)就是一个事务(Transacion)。但是对于跨链,事务特指多链多笔交易的一致性,所以事务和交易就得区分开来,显然跨链场景下sendTransaction
就有歧义了。
快帮忙想个更好的名字吧,在issue区留意即可。
BUG描述
按照文档进行htlc跨链转账操作:在进行转账结果确认时发现,bcos_user1(发起者)账户余额确实发生了变化(减少700),但是bcos_user2(bcos链上的转账接受者)账户余额仍是0;查询fabric_user1(fabric链上的转账接受者)账户余额增加500,但是fabric_admin的账户余额却未发生变化。很是费解,希望我描述的算清楚,附上截图
重现方式
预期结果
详细描述上述操作的预期结果。
截图
如果可行,放上截图便于更具体地描述BUG。
环境
更多信息
关于该 BUG 的更多信息
类VerifyData功能非常简单,保存待验证的数据,并提供一个接口与期望的数据进行对比。目前的类名似乎不太规范,帮忙贡献一个更好的名字吧。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.