airbloc / airbloc-go Goto Github PK
View Code? Open in Web Editor NEWAirbloc Core Implementation using Go
Home Page: https://airbloc.org/
License: Apache License 2.0
Airbloc Core Implementation using Go
Home Page: https://airbloc.org/
License: Apache License 2.0
README.md
에 해당 Badge 통합low level 호출에 대한 return값으로 success여부와 returnData를 받게됩니다 오예!
만약 적용하게된다면 Exchange단의 작업 기간이 조금 더 늘어날것 같네요 그 점 유의해주세요
두 API의 역할이 겹치는 부분이 많습니다. 지금은 분리가 힘들지만, 장기적으로 천천히 분리하는 방향으로 가면 좋을것 같습니다.
무엇에 관한 이슈인지 빠르게 파악하기 위함
지금 커밋하는 형식대로
앞에 주제를 달면 좋을것 같네요
[Common]
[Contract]
[Collection]
이런 형식으로요
Start() -> Start(context.Context)
When sending DAuth/SignIn request to UserDelegate node,
Airbloc node intermittently invokes lookup error.
airbloc python node와 같은 label 시스템을 사용했으면 좋겠습니다.
App Registry, without 🥩
appName
과 displayName
을 구분함Origin
에 대한 화이트리스트 저장
geth
의 Authentification 기능과 포지션이 유사할 수 있다고 생각하면 될 것 같습니다.account/client.go 38번째 줄에서 api 패키지에 있는 struct를 사용합니다.
airbloc run
을 쳤을 때 gRPC 서버가 작동해야 함airbloc sync
를 쳤을 때 싱크가 되어야 함a.k.a. Airbloc Network
distance(n₁, n₂) = keccak256(n₁) XOR keccak256(n₂)
P2P Address Lookup을 할 때 노드 주소를 넣는데, 이를 Topic으로 처리해서 생기는 문제입니다.
nameserver.Lookup()
go-ethereum
)Service
들을 포함하는 컨테이너가 있어야 함 (e.g. geth의 eth.EthereumBackend
)Service
내에서는 해당 컨테이너의 존재를 모름. Seperation-of-ConcernsService
간의 Peer-dependency를 지원해야 함 (e.g. DataService가 WarehouseService 참조)hash는 일단 기본적으로 32byte 정보이기 때문에 string으로 보내기 위해서는 hex로 바꾸어서 보내야 합니다.
이에 대하여 ethereum과의 호환성을 위해 geth common패키지에 있는 HexToHash, HexToAddress를 사용하여 변환하게 된다면 여러가지 이점을 취할 수 있을것 같습니다.
Bundle 의 요구사항은 다음과 같습니다.
Pros:
Cons:
Pros:
Cons:
Pros:
Cons:
Pros:
Cons:
Related with #40
We need to refine current bundle data structure by allowing multiple users to be placed into the leaf of the SMT. This may require following tasks:
sync가 필요한 부분 (contract <-> localdb)
생각해봐야할 점은
네이밍이 꼬이면서 하나로 통일을 해야된다는 생각이 들었습니다.
우리가 interface를 만들지 않아서 생긴 문제라 interface를 선언해놓자,
그리고 Mockgen으로 generate하면 간단하게 해결되는 문제.
ECDSA key 만들때 길이가 31인 []byte가 생성이 되는것 같음
그래서 길이 체크하고 안맞으면 padding rune으로 넣어주는 방법을 생각중인데 어떻게 생각하시나요
@therne
기존에 있는 contract bind는 다음과 같은 문제점이 있음
해결방법은 go-ethereum의 bind패키지에 있는 bind generation template와 script를 수정해서 pr를 날려보자
To validate the data by using Sparse Merkle Tree as a User ID accumulator (#40), efficient construction of the Sparse Merkle Tree is required because it's still not very cheap.
geth의 기본 클라이언트 포트인 8545번 포트를 스캔해서 막혀있지 않은 노드들의 자산을 빼돌린 사건이 있었음.
살펴보니까 geth에는 기본 인증 기능이 없어서 바깥쪽에 레이어를 하나 더 감싸야 함.
그런데 이걸 해야되는지 모르는 사람들이 수두룩하기 떄문에 우리가 만들어줘야 할 것 같음.
왜 모르는 사람들이 많냐고 생각하냐면 https://thehackernews.com/2018/06/ethereum-geth-hacking.html 이거 참고 털린 돈이 "조금" 많음
Identity Manager (#21)을 User Delegate와 Account Proxy로 쪼갠다.
User Delegate의 예방적 신뢰 장치: User Delegate는 (자신이 Delegate하는 User들에 한해서) 임의로 설정을 조작할 수 있다. 물론 유저는 얼마든지 Notify할 수 있기 때문에, 유저는 자신의 설정이 바뀌면 Delegate를 바꾸는 방식으로 대응할 수 있지만 이는 후행적인 처리이며 Delegate는 사실상 어떠한 패널티도 입지 않는다. 따라서 예방적 신뢰를 보장할 수 있는 프로토콜을 설계하거나, 챌린지 프로토콜 등의 도입을 통해 확실한 패널티를 부여해야 한다.
Fallback User Delegate의 설정 : 현재 DAuthSignup시 User Delegate가 없으면 Fallback User Delegate인 Airbloc Tracker가 설정되도록 하드코딩되어있다. 물론 일단 Airbloc Tracker를 Delegate로서 SignUp한 이후에 setDelegate를 통해 Delegate 권한을 임의로 옮겨올 수 있지만, 궁극적으론 UX단에서 DAuthSignup시 User Delegate (a.k.a "Tracker Service")를 사용자가 직접 지정할 수 있게 해야 한다.
userdelegate
로서 돌아갈 수 있는 옵션을 추가server
API와 userdelegate
API 분리Accounts
에서 Delegate 지정event
를 emit한다.In extension of #49...
appName
과 displayName
을 구분함Origin
에 대한 화이트리스트 저장
geth
의 Authentification 기능과 포지션이 유사할 수 있다고 생각하면 될 것 같습니다.Accounts
컨트랙트에서 Password Signature를 통한 Authentification을 지원현재 통일되어 있지 않은 ID 형식을 8바이트로, 다음과 같이 통합합니다. 모든 ID는 컨트랙트에서 만들어져야 합니다.
bytes8(keccak256(block.number, msg.sender /* or AccountID */, someUniqueInfo))
적용 범위
현재는 Bundle ID를 클라이언트단에서 제네레이팅함.
하지만 이렇게 할 경우 Colision등의 문제가 생길 수 있으므로 컨트랙트단에서 하는게 필요함.
고려사항:
Dep이랑 하위호환되기때문에 해서 나쁠건 없지 않을까용?
Requirements:
GO111MODULES=on
Data Transaction은 Data Provider가 Data Consumer에게 어떤 데이터에 대한 접근 권한을 허용했다는 내용이다.
Data Transaction은 최소한 다음과 같은 4개의 필드를 포함한다.
id
: 8바이트 IDfrom
: Data Provider Account IDto
: Data Consumer Account IDdata
: 데이터 ID의 목록. 데이터 ID는 bundleID
/userID
의 16바이트로 구성된다.Data Transaction Manager (DTM)는 해당 Data Transaction을 관리하는 컨트랙트이다. 기능은 다음과 같다.
to
Field, 즉 내가 소유한 데이터) Data Transaction 목록을 조회예를 들어, 데이터 거래가 체결된 후엔 DTM을 통해 Data Transaction이 발생되어 실제 데이터 소유권이 부여된다. 이후 데이터 컨슈머는 Re-Encryption Proxy에게 어떤 데이터에 대해 자신을 대상으로 하는 Data Transaction의 ID를 제시해야 한다. Re-Encryption Proxy 노드는 해당 Data Transaction ID를 보고 트랜잭션 내용을 조회한 후, 그것이 해당 컨슈머의 것이 맞으면 재암호화 키를 반환할 것이다.
이는 Data Permission Table이 트랜잭션 형태로 구현된 것이라고도 볼 수 있다. 굳이 Permission Table을 사용하지 않고 DTM을 통해 번거롭게 데이터의 소유권을 관리하는 이유는 Phase 2에서의 Scalability 확보를 위해서다. Phase 1에서는 단순히 데이터 트랜잭션 안에 모든 거래 대상 데이터의 ID를 전부 포함시키지만, Phase 2에서는 Accumulator를 사용하는 것을 목표로 하기 때문이다.
한번의 Ethereum Transaction에 들어갈 수 있는 Data ID의 양은 제한되어 있으므로, Data Transaction을 생성할 때 여러번의 Ethereum Transaction을 일으켜서 트랜잭션을 build할 수 있어야 한다.
Some cryptoeconomic magic— To be described 👀
escrowContract = null
로 지정하고 날리면 똑같은 효과가 나기 때문. 무엇이 더 좋을까?합쳐서 새로 생길 airbloc용 client struct에 넣자
패키지를 분리해서 SDK로써 이 프로젝트를 사용할때 api와 관련된 쓸데없는 파일들이 같이 들어가지 않게 막는다.
ex) dep으로 geth를 사용하는 경우, 사용하고 있는 패키지만 받아오고 나머지 패키지는 받아오지 않는다.
dial backoff error
가 간헐적으로 발생함.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.