1. DB Schema

Agenda

{
    agendaid: Number,         // 의제 아이디 
    creator: String,          // 의제 생성한 계정 주소 
    status: Number,           // 의제 상태값.  AgendaStatus { NONE :0 , NOTICE:1, VOTING:2, EXEC:3, ENDED:4, PENDING:5, RISK:6 }
	  result: Number,           // 의제 결과. AgendaResult { UNDEFINED:0, ACCEPT:1, REJECT:2, DISMISS:3 }
    executed: Boolean ,          // 실행여부 true 실행함, false: 실행안함. 
    executor: String ,           // 실행 트랜잭션을 보낸 주소   
    tCreationDate: Number,       // 의제 생성시간  
    tNoticeEndTime:  Number,     // 공지 종료시간 
    tVotingStartTime: Number,    // 투표 시작시간, 
	  tVotingEndTime:  Number,     // 투표 종료시간,
    tExecTime:  Number,          // 의제 실행시간 
    countAbstainVotes:  Number,  // 기권 투표수, 
    countYesVotes:  Number,      // 찬성 투표수,  
    countNoVotes:  Number,       // 반대 투표수 , 
    target: String,              // 의제 실행 컨트랙 주소
    functionBytecode: String ,   // 의제 실행 함수, 실행이 된 후에 정보가 없데이트 됨. 
    description: String,         // 의제 설명 ( 컨트랙 생성시 입력되는 설명, 의제 상세정보와 다름 ) 
    voters: [String],            // 의제 투표가능한자 (위원회)   
    chainId: Number,             // 체인아이디 mainnet:1, rinkeby: 4 
    blockNumber: Number,         // 의제 생성시 블록 번호 
    transactionHash: String,     // 의제 생성시 트랜잭션 
		statusUpdateBlock: Number,   // 가장 최근의 상태값 변경시 블록번호  
		resultUpdateBlock: Number,   // 가장 최근의 결과값 변경시 블록번호  
    createdTime: Number,         // DB 레코드 생성시간, 
    updated: Number ,            // DB 레코드 업데이트 시간 
}

Agendavote

{
    agendaid: Number,    // 의제 번호
    voter: String,       // 투표자 주소
    hasVoted: Boolean,   // 투표여부
    vote: Number,        // 투표 정보 VoteChoice { ABSTAIN:0, YES: 1, NO: 2, MAX:3 }
    comment : String,    //  
    createdTime: Number,
    updated: Number ,
}

Agendacontent

{
    agendaid: Number,   // 의제 아이디 
    creator: String,    // 의제 생성자  
    tx: String,         // 의제 생성 트랜잭션 
    contents: String,   // 상세정보 
    del : Boolean, 
    chainId : Number,   // 체인아이디 mainnet:1, rinkeby: 4 
    createdTime: Number,
    updated: Number ,
}

Layer2coinage

{
    layer2: String,              // 레이어2 주소 
    operator: String,            // 오퍼레이터 주소 
    coinageAddress: String,      // 코인에이지 주소 
    operatorAmount: Number,      // 오퍼레이터 잔액 
    coinageTotalSupply: Number,  // 코인에이지 총수량 
    totTotalSupply: Number,      // tot 총수량 
	  chainId: Number,             // 체인아이디 mainnet:1, rinkeby: 4 
    blockNumber: Number,         // 집계시 블록번호 
    transactionHash: String,     // 집계시 트랜잭션해쉬
    createdTime: Number,
    updated: Number ,
}

Layer2 ( Operator )

{
    layer2: String,               // 레이어2 주소 : dao일때는 candidateContract 값이 기록됨. 
		candidateContract: String,    // candidateContract의 주소 
    operator: String,             // 오퍼레이터 주소 : dao일때 candidate(EOA)  
    kind: String,                 // 레이어2 종류, dao-> candidate  , 기존layer2 -> layer2  
    name: String,                 // 이름 
    website: String,              // 웹사이트 
    description: String,          // 설명 
		memberJoinedTime: Number,     // 멤버 조인 시간 
	  indexMembers: Number,         // 멤버 인덱스 번호
    rewardPeriod: Number,         // 멤버 활동기간 관련
    claimedTimestamp: Number,      // 멤버 활동비 지급된 시간 
    chainId: Number,              // 체인아이디 mainnet:1, rinkeby: 4 
    blockNumber: Number,          // 해당 정보 추가시점의 블록번호, 
    transactionHash: String,      // 해당 정보 추가시점의 트랜잭션 해쉬
    updateCoinageBlock:Number,    // 가장 최근에 Layer2coinage 필드 업데이트 시점의 블록번호  
    updateCoinageTime: Number,    // 가장 최근에 Layer2coinage 필드 업데이트 시점의 시간 
    updateCoinageTotal:Number,    // 가장 최근에 Layer2coinage 필드 업데이트때의 코인에이지 총수량
    createdTime: Number,    
    updated: Number ,
}

DAO Candidate

{
    candidate: String,            // dao일때는 EOA, layer2일때는 CA(layer2주소)  
		candidateContract: String,    // candidateContract의 주소  
    kind: String,                 // 레이어2 종류, dao-> **candidate**  , 기존layer2 -> **layer2**  
    name: String,                 // 이름 
    website: String,              // 웹사이트 
    description: String,          // 설명 
    chainId: Number,              // 체인아이디 mainnet:1, rinkeby: 4 
    blockNumber: Number,          // 해당 정보 추가시점의 블록번호, 
    transactionHash: String,      // 해당 정보 추가시점의 트랜잭션 해쉬
    updateCoinageBlock:Number,    // 가장 최근에 Layer2coinage 필드 업데이트 시점의 블록번호  
    updateCoinageTime: Number,    // 가장 최근에 Layer2coinage 필드 업데이트 시점의 시간 
    updateCoinageTotal:Number,    // 가장 최근에 Layer2coinage 필드 업데이트때의 코인에이지 총수량 
}