Vat 컨트랙트 : 핵심인 Vault, Dai 및 담보 상태는 Vat 에 저장된다. Vat 컨트랙트는 외부에 의존적이지 않으며, DAI 의 “Accounting Invariants(회계적인 불변량)”을 유지한다.
Spot 컨트랙트 : poke 는 Spot 에서 인증되지 않은 유일한 함수이다. 그 함수는 poked 된 ilk 의 byte32 를 받아들인다. poke 는 peek 과 file 두 가지 external 함수를 호출한다.
Vat 컨트랙트의 메서드들은 가능한 한 일반적이고 매우 상세한 인터페이스를 갖도록 설계되었다. parameters 의 순서가 섞이지 않도록 주의해야 한다.
Vat 에 의해 인증된 모든 모듈은 모든 root 액세스 권한을 갖기 때문에 시스템의 모든 담보를 훔칠 수 있다. 따라서 새로운 담보 유형과 어댑터를 추가하는 것은 상당한 위험이 발생하는 것을 의미한다.
Cat 이 업데이트 될 때는 Cat 에 대한 여러 참조가 동시에 업데이트 되어야 한다. (Vat.rely, Wow,rely, End 등) 또한 시스템의 pause.proxy() 인 End 에 의존해야 한다.
Spot 에 의해 인증된 모든 모듈은 완전한 root 액세스 권한을 가지며, 결과적으로 poked 할 수 있는 ilk 를 추가하거나 제거할 수 있다. 이것은 시스템을 완전히 파괴하지는 않지만 위험을 초래할 수 있다.
Vat 는 dss 의 핵심 Vault 엔진이다. Vault 를 저장하고, 연관된 DAI 및 담보 잔액을 추적한다.
또한 Vault 와 잔액을 조작할 수 있는 규칙을 정의한다. Vat 에 정의된 규칙은 불변이기 때문에 어떤 의미에서는 Vat 에 규정된 규칙은 dss 의 규약으로 볼 수 있다.
Vat 에 적용되는 핵심 원칙은 아래와 같다.
Vault 는 frob(i, u, v, w, dink, dart) 을 통해 관리된다. frob() 은 사용자 u 의 Vault 를 수정하고, 사용자 v로부터 gem을 사용하고, 사용자 w 를 위해 DAI 를 생성한다.
Vault 는 grab(i, u, v, w, dink, dart) 을 통해 압류된다. grab() 은 사용자 u 의 Vault 를 수정하고, 사용자 v에게 gem 을 주고, 사용자 w 에게 sin 을 생성한다.
grab() 은 Vault 를 청산하여, Vault 로부터 사용자에게 sin balance 를 전송하는 것을 의미한다.