테라 생태계에서 스마트 컨트랙트를 개발하는 데 사용하는 CosWasm을 활용해 간단한 스마트컨트랙트를 개발해보겠습니다.
개발할 스마트 컨트랙트는 가위바위보 게임입니다.
- 내기로 가위바위보 새 게임 시작(금액은 에스크로에 보관)
- 두 선수 모두가 자신이 무엇을 냈는지 확정하기 전까지는 비공개여야한다.
- 게임에서 이기면 배팅 금액을 얻고 리더보드에 표시된다.
먼저 요청 들어온 상대방의 지갑 주소가 유효한 것인지 확인하는 기능을 먼저 만들겠습니다.
/packages/cw20/src/msg.rs의 Cw20ExecuteMsg에 StartGame을 추가해줍니다.
StartGame {
opponent : String,
}
그 후 contracts/cw20-base/src/contracts.rs의 execute 함수에 방금 추가한 StartGame을 추가해줍니다.
ExecuteMsg::StartGame { opponent } => execute_addr_validate(deps,opponent.as_str())
StartGame이라는 메시지가 들어온다면 지갑 주소가 유효한지 확인하는 함수를 실행시키는 것입니다.
그다음 execute_addr_validate 함수를 구현해주겠습니다.
pub fn execute_addr_validate(deps: DepsMut,address: &str) -> Result<Response, ContractError> {
let _adr = deps.api.addr_validate(&address)?;
let res : Response = Response::new().add_attribute("action", "validating address");
Ok(res)
}
테스트 함수를 작성해서 문제가 없는지 확인합니다.
#[test]
fn validate_opponent_addr() {
let mut deps = mock_dependencies();
let env = mock_env();
let info = mock_info("addr0000", &[]);
let msg = ExecuteMsg::StartGame { opponent: "addr0000".to_string() };
let res = execute(deps.as_mut(), env, info, msg).unwrap();
// Ok(Addr::unchecked(input))
//addresss => "addr0000"
assert_eq!(res.messages, vec![]);
}
'블록체인 > 테라' 카테고리의 다른 글
[terra.js] CreateTxFailed: First argument must be...에러 (0) | 2022.07.13 |
---|---|
[에러] linker 'cc' not found 에러 해결 (0) | 2022.07.04 |
테스트넷에 배포하기 (0) | 2022.04.09 |
Terrain 프로젝트 예제 프론트 연동하기 (0) | 2022.04.05 |
Terrain 예제 (Raffle - Dapp) 실행해보기 (0) | 2022.04.04 |